在OpenID Connect中,可以将ID令牌而不是访问令牌传递给资源服务器以进行授权吗?

use*_*038 5 oauth oauth-2.0 openid-connect

我正在考虑使用id令牌代替id令牌进行授权,以便资源服务器可以验证其签名并从中提取用户ID。我不知道这种方法有什么缺点吗?

我想如果丢掉访问令牌,就不能使用验证端点。对于我们来说,用户授予访问权限的范围无关紧要,因为客户端应用程序和OIDC的身份提供者均归我们所有。

我正在使用该库来实现OAuth2和OpenID服务器。 https://github.com/bshaffer/oauth2-server-php

Kav*_*uwa 7

ID 令牌的使用旨在用于客户端应用程序。客户端使用它来验证最终用户。所有这一切都可以通过索赔 ID 令牌转移来实现。这些声明内置于 JWT 中。简单来说,ID Token 是一个自包含的令牌。

现在,如果您控制所有目标方,则可以在客户端之外共享 ID 令牌。想想你通过 ID Token 泄露用户敏感信息的场景。例如,如果 ID 令牌包含仅供客户使用的关于性别的声明。但是当您与第三方共享 ID Token 时,您暴露了这些敏感信息。如果有法律障碍,这可能是犯罪。

另一点是关于 ID 令牌验证。因此,ID Token 针对客户,aud相应地设置了重要的声明。当您将 ID 令牌传递给要使用的后端时,此类验证可能会失败。

有两种解决方案。首先是使用自包含的访问令牌。如今,使用基于 JWT 的访问令牌很常见。有了它们,您将获得相同的解决方案。它将包含最终用户身份、范围值以及令牌验证信息。Azure AD 使用这种方法 -检查此链接

第二种是使用ID Token。鉴于您控制前端和后端,我认为您可以使用它。但请注意未来的扩展。特别是不要将其暴露给其他方。

  • 谢谢。我最终使用了您的第一个解决方案(使用基于 JWT 的访问令牌)。oauth2-server-php 支持使用基于 JWT 的访问令牌。 (2认同)