Identity Server 4 隐式授权流中Scope相关问题咨询
问题1:移除
openid Scope后请求报错的原因 - OpenID Connect(OIDC)协议有硬性要求:所有OIDC认证请求必须携带
openidScope,这是区分普通OAuth2请求和OIDC身份认证请求的核心标志。 - 你使用的隐式授权流是OIDC规范定义的身份认证流程,而非单纯的OAuth2授权流程。IdentityServer4会严格校验请求合规性,一旦移除
openid,服务端会直接判定这不是合法的OIDC请求并拒绝处理;同时Angular端的OIDC客户端库也会因为请求不符合OIDC规范抛出错误。 - 直白总结:
openid是OIDC身份认证的必要前提,没有它就走不通完整的身份认证流程。
问题2:移除
profile Scope后仍能看到用户信息的原因 - OIDC的
id_token默认会包含核心身份标识Claims,比如sub(用户唯一ID),这些是OIDC协议强制要求的Claims,和profileScope无关,哪怕没请求profile也会出现在Token里。 - 可能你的IdentityServer4配置中,用户的基础Claims(比如用户名)是通过自定义Claims提供器、或者Identity资源的默认Claims集合自动添加的,不是依赖
profileScope才返回的。比如IdentityServer4默认的IdentityResources.OpenId就包含sub,如果你自定义了Identity资源,可能把部分profile相关的Claims直接加到了默认资源中。 - 另外,隐式授权流中
id_token的核心作用就是传递用户身份信息,即使没显式请求profile,服务端也可能返回一些提前配置好的默认用户Claims,这取决于你在IdentityServer4中对用户Claims的输出规则设置。
内容的提问来源于stack exchange,提问作者Mohamed Mansour
相关产品推荐
相关产品推荐

