首页 > 解决方案 > 在 authentication_code 流程中使用时,id_token 是否应该包含声明

问题描述

response_type=code在使用with对支持 OpenID 的 OAuth2 授权服务器进行身份验证后scope=openid email,调用令牌端点应该返回id_token

我缺少的是这是否id_token应该包含email- 在这种情况下客户端应该调用userInfo端点。

规范说:

http://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims

配置文件、电子邮件、地址和电话范围值请求的声明从 UserInfo 端点返回,如第 5.3.2 节所述,当使用导致访问令牌发出的 response_type 值时。但是,当没有颁发访问令牌时(response_type 值 id_token 就是这种情况),生成的声明将在 ID 令牌中返回。

据我了解,这意味着id_token不需要包含email是否access_token可用,因为userInfo 应该调用它来获取它。但是,在https://github.com/bitly/oauth2_proxy中查看 oidc 客户端的实现,似乎它们确实需要email声明在内部可用id_token而不调用userInfo端点。

OpenID 兼容授权服务器中的正确行为是什么?

标签: emailoauth-2.0openidclaimsuserinfo

解决方案


OpenID Connect Core说 id_token 可能包含其他声明。在 SAML 断言中,属性也是可选的。一些 SaaS 提供商可能反对 Userinfo API 调用(即 SAML 中的工件)。在 Gluu 服务器中,我们有一个用于 legacyIdTokenClaims 的服务器级 JSON 配置选项。默认情况下禁用此功能 - 在令牌端点呈现代码 + client_creds 更利于安全。如果设置为 true,Gluu 服务器将包含与为客户端指定的 OpenID 范围相对应的声明。


推荐阅读