2

我正在研究一个我试图实现以下目标的用例:

  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

    湾。对于客户端身份验证: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 作为回报。这是可能的还是我会违反 Open ID Connect 规范?

4

2 回答 2

3

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

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

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

当然,仍然可以将 JWT(与用户和/或用户身份验证无关)用于客户端身份验证目的,但它不会用作授权,而是用作授权代码授权中客户端机密的替代方案。

于 2015-08-04T20:44:45.563 回答
0

规范中没有任何内容说不能支持 oidc 范围。因此,无论哪种方式都可以推断出来。我假设如果执行身份验证以获取初始 JWT,那么返回 id_token 就可以了。然而,我正在继续研究这个。在此之前,如果客户端在令牌调用中发送 oidc 范围,则采取同样发送 id_token 的方法。

于 2021-12-10T19:29:26.240 回答