首页 文章

在authorization_code流程中使用时,id_token是否应包含声明

提问于
浏览
4

使用 response_type=codescope=openid email 对支持OpenID的OAuth2授权服务器进行身份验证后,调用令牌 endpoints 应返回 id_token .

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

规范说:

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

如第5.3.2节所述,当使用response_type值导致发出访问令牌时,将从UserInfo endpoints 返回配置文件,电子邮件,地址和电话范围值请求的声明 . 但是,当没有发出访问令牌时(响应类型值为id_token的情况),结果声明将在ID令牌中返回 .

根据我的理解,这意味着 id_token 不需要包含 email 如果 access_token 可用,因为应该调用 userInfo 来获取它 . 然而,在https://github.com/bitly/oauth2_proxy中查看oidc客户端的实现,似乎他们确实要求 email 声明在 id_token 内可用而不调用 userInfo endpoints .

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

3 回答

  • 0

    openid规范比谷歌或微软正在做的更严格(可能是其他提供商,但我没有't check). I guess oauth2_proxy kept the provider'的行为 . 例如谷歌,在交换 codeaccess_token 时,你要求的范围内的所有索赔都返回 id_token . 但如果您阅读他们的文档,他们会指定 userInfo endpoints :https://developers.google.com/identity/protocols/OpenIDConnect

    我认为只要您支持所有 endpoints ,是否将 id_tokenaccess_token 一起返回 id_token 取决于您是谁 . 在大多数情况下,它会删除对 userInfo 的一次额外调用,并且不会暴露任何漏洞 .

  • 1

    OpenID Connect Core表示id_token可能包含其他声明 . SAML断言中的属性也是可选的 . 某些SaaS提供程序可能会反对Userinfo API调用(即SAML中的工件) . 在Gluu Server中,我们为legacyIdTokenClaims提供了服务器级JSON配置选项 . 默认情况下禁用此选项 - 在令牌 endpoints 上显示代码client_creds可提高安全性 . 如果设置为true,Gluu Server将包含与为客户端指定的OpenID范围对应的声明 .

  • 1

    另见https://openid.net/specs/openid-connect-core-1_0.html#ClaimsParameter

    如果不存在,则根据第2节中的ID令牌定义以及第3.1.3.6,3.2.2.10,3.3.2.11和3.3.3.6节中的附加每流ID令牌要求,请求默认ID令牌声明 . .

    使用 response_type=code 时,适用第2节和第3.1.3.6节 .

    ID令牌的内容如第2节所述 . 使用授权码流时,以下ID令牌声明的这些附加要求适用:at_hash:[...]

    因此,作为OpenID Connect 1.0客户端,您不应期望在ID令牌中出现除第2节和 at_hash 中定义的声明之外的其他声明 . 我不相信OpenID Connect 1.0禁止ID令牌中的其他声明(例如来自用户的配置文件),但通用客户端不应该依赖它们的存在 .

    这意味着oauth2_proxy不是通用客户端,因为它依赖于特定提供商的实现 .

相关问题