在 OIDC 中,/token 调用不需要 scope=openid 吗?



当我发送一个/token请求,然后是/authorize对Open Id Connect服务器的请求时,我知道需要为/authorize呼叫设置scope=openid。我的问题是,/token电话也需要吗?

在 OIDC 规范中,它对此没有任何说明。

3.1.3.1. 令牌请求

客户通过出示其授权来提出令牌请求 (以授权代码的形式)到令牌端点使用 grant_type值authorization_code,如 的 第 4.1.3 节中所述 OAuth 2.0 [RFC6749]。如果客户是机密客户,则 必须使用身份验证向令牌终结点进行身份验证 注册其client_id的方法,如第 9 节所述。

客户端使用 HTTP 将参数发送到令牌终结点 POST 方法和表单序列化,根据第 13.2 节,如前所述 在 OAuth 2.0 [RFC6749] 的第 4.1.3 节中。

如果是这种情况,/token端点实现如何实现请求是 ODIC 还是 OAuth2?它怎么知道它是否应该发送id_token

令牌请求是通过客户端需要提供的所谓授权来完成的,通常是(在您的情况下)提供授权代码。授权在特定上下文中颁发,授权服务器跟踪该上下文。

在您的情况下,授权服务器将跟踪以下事实:代码是在包含"openid"作用域的授权请求上发出的,并且该作用域是由用户授予的。因此,当代码在令牌端点兑换时,响应中包含id_token

在 OpenID Connect Core 1.0 中,包含勘误表 set 1 部分: 3.1.2.1.身份验证请求

OpenID Connect 使用以下 OAuth 2.0 请求参数 授权代码流:

范围必填。OpenID Connect 请求必须包含 openid 范围 价值。如果 openid 范围值不存在,则行为为 完全未指定。可能存在其他范围值。范围值 应忽略实现无法理解的用途。 有关此定义的其他范围值,请参阅第 5.4 节和第 11 节 规范。

"必须包含 openid 范围值",这是确定这是 OpenID 连接请求的因素。

令牌请求中没有任何内容与 OAuth 2.0 不同。身份验证请求是授权端点的第一个调用,范围=openid,返回的授权代码是获取访问令牌和ID令牌的授权。如3.1.3.3所述。 成功的令牌响应

从客户端接收并验证有效且授权的令牌请求后,授权服务器将返回包含 ID 令牌和访问令牌的成功响应。

最新更新