OIDC 中的 OAuth2 角色

Mik*_*ike 2 oauth-2.0 openid-connect

在 OAuth2 协议中,客户端(OIDC 中的 RP)应用程序获取访问令牌,这使其能够代表Resource Owner使用不同的服务(资源服务器角色)。 另一方面,在 OpenID Connect 协议中,Client获得 2 个令牌(access 和 id 令牌)。现在此客户端可以使用访问令牌从 UserInfo 端点获取用户声明。


  1. OP(授权服务器)是否在这里扮演资源服务器的角色(就 OAuth2 而言),而客户端代表用户获取用户数据?
  2. 客户端如何使用 ID 令牌?客户端是否将此 ID 令牌传递给资源所有者的用户代理(浏览器),然后用户代理存储此令牌以启用 SSO(cookie)?
  3. 客户端(例如,与获取 ID 令牌的那个不同)是否必须在每次用户访问令牌时验证令牌(调用 OP 来验证它),或者客户端仅在第一次被此令牌访问时才这样做,然后创建安全性上下文使其能够消除每次在 OP 进行验证的请求?在这种情况下,如何实现这个安全上下文?
  4. 当客户端可以使用 ID 令牌访问 UserInfo 端点时,访问令牌用于什么,除了获取用户声明以及为什么它与 ID 令牌一起发送?

Kav*_*uwa 5

首先,您必须了解令牌的用途。访问令牌是一种足以代表最终用户访问受保护资源的令牌。它由 OAuth 2.0 授权框架定义。现在拥有访问令牌不会对最终用户进行身份验证。它只是授权客户端应用程序访问资源。OpenID Connect 引入了 ID 令牌。现在此令牌将由您的客户端应用程序使用。协议定义了如何做到这一点,如果有效,您的客户端应用程序可以对最终用户进行身份验证。

Q:OP(Authorization server)是否在这里扮演了Resource Server的角色(OAuth2),Client代表用户获取用户数据?

部分正确。根据协议文档userinfo 端点充当 OAuth 2.0 保护资源。

UserInfo 端点是一个 OAuth 2.0 受保护资源,它返回有关经过身份验证的最终用户的声明。为了获取请求的有关最终用户的声明,客户端使用通过 OpenID Connect 身份验证获取的访问令牌向 UserInfo 端点发出请求。

问:客户端如何使用 ID 令牌?客户端是否将此 ID 令牌传递给资源所有者的用户代理(浏览器),然后用户代理存储此令牌以启用 SSO(cookie)?

如前所述,客户端必须验证 id 令牌,并基于此验证最终用户。ID 令牌未与 SSO 连接。

问:客户端(例如,与获取 ID 令牌的那个不同)是否必须在每次用户访问时验证令牌(调用 OP 进行验证),或者客户端仅在第一次被此令牌访问时才这样做,然后创建安全上下文,使其能够消除每次在 OP 进行验证的请求?在这种情况下,如何实现这个安全上下文?

如果您正在使用从受保护端点消费的 ID 令牌,则令牌接收方应在接受之前对其进行验证。可以选择在适当的令牌验证后创建会话(会话不得延长令牌的生命周期)。

问:访问令牌用于什么,除了获取用户声明以及为什么它与访问令牌一起发送,当客户端可以使用 ID 令牌访问 UserInfo 端点时?

访问令牌是您应该用来访问 OAuth 2.0 受保护资源的令牌。一旦端点收到它,端点就可以根据授权服务器公开的令牌自省端点(自省的协议定义)验证访问令牌。并且使用 Openid Connect,定义 userinfo 端点让任何具有有效 ID 令牌的一方都可以使用它。