email - 在 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 兼容授权服务器中的正确行为是什么?
解决方案
OpenID Connect Core说 id_token 可能包含其他声明。在 SAML 断言中,属性也是可选的。一些 SaaS 提供商可能反对 Userinfo API 调用(即 SAML 中的工件)。在 Gluu 服务器中,我们有一个用于 legacyIdTokenClaims 的服务器级 JSON 配置选项。默认情况下禁用此功能 - 在令牌端点呈现代码 + client_creds 更利于安全。如果设置为 true,Gluu 服务器将包含与为客户端指定的 OpenID 范围相对应的声明。
推荐阅读
- python - 每 15 分钟发送一条关于不和谐的消息
- java - 创建多个列表时指向同一个元素
- google-forms - 网站中集成的 google 表单无法在 Mac 上打开,但可以在 PC 上使用。错误消息“forms.gle 拒绝连接。”
- python - 如何在 gui 屏幕内的 tkinter GUI 中显示熊猫数据框?
- javascript - 有没有办法在 switch 语句中转换 if 语句?
- r - 如何在 R 中重现预测函数的结果
- css-selectors - 使用 GTM 从 Div 标签中获取 ID
- asp.net - ASP.NET 和 OWIN Cookie Azure Open ID 不起作用
- javascript - 如何在 Laravel 上安装 jsPDF
- c# - 使用 Lambda 表达式生成错误的动态 Linq