Open ID Connect with JWT Bearer Token Grant Type

Open ID Connect with JWT Bearer Token Grant Type

我正在处理一个用例,我试图实现以下目标:

  1. 使用 OpenID Connect 协议。规范在这里:(http://openid.net/specs/openid-connect-core-1_0.html)

  2. 发出对 /oauth2/access_token 端点的调用:

    一个。对于资源身份验证:使用 grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer 这符合规范 (https://datatracker.ietf.org/doc/html/draft-ietf-oauth-jwt-bearer-12)

    b。对于客户端身份验证:使用 client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer 这又是按照上面 #a 点中列出的相同规范。

我的问题是:

我知道 Open ID Connect 规范只讨论“授权代码”和“隐式”授权方案。但是,我计划将 Open ID 规范与 JWT Bearer 规范结合使用。换句话说,通过 JWT Bearer Grant Type 在一次调用 OAuth2.0 令牌 api (/access_token) 中发送身份验证和授权信息,并接收访问令牌和id_token 在 return。这可能吗?或者我会违反 Open ID Connect 规范吗?

这在规范中没有定义,因为它是一个循环引用:OpenID Connect 的主要功能是通过传递给客户端的 id_token 向客户端验证用户。 id_token 是描述用户和身份验证属性的 JWT。客户端收到来自用户的所谓授权,以获取包含该用户信息的 id_token

如果授权已经是(必然)绑定到用户和身份验证事件的 JWT,则无需获得另一个基本描述相同的授权(本质上这就是隐式授权所实现的)。如果授权未绑定到用户身份验证,则不能用于获取 id_token,因为这会违反 OpenID Connect 的语义。

因此,JWT Bearer 授权类型在 OAuth 2.0(委托授权)场景中有意义,但在 OpenID Connect(用户身份验证)场景中没有意义。

当然,仍然可以使用 JWT(与用户 and/or 用户身份验证无关)进行客户端身份验证,但它不会用作授权,而是用作客户端密码的替代方案在授权代码授予中。

规范中没有任何内容表明不支持 oidc 作用域。所以无论哪种方式都可以推断出来。我假设如果执行身份验证以获取初始 JWT,那么 return 和 id_token 都可以。然而,我正在继续对此进行研究。在此之前,如果客户端在令牌调用中发送 oidc 范围,则采用也发送 id_token 的方法。