OAuth 2 access_token 与 OpenId Connect id_token

问题描述 投票:0回答:5

虽然我以前使用过 OAuth 2,但我是 Open ID Connect 的新手。

阅读教程和文档时,我遇到了access_tokenid_token,其中access_token是根据OAuth 2生成的随机唯一字符串,id_token是JSON Web令牌,其中包含用户ID等信息,算法、发行者和可用于验证它的各种其他信息。我还看到 API 提供商同时提供 access_token 和 id_token,据我所知,这是为了向后兼容。

我的问题是是否可以同时使用access_token和id_token来访问受保护的资源?或者 id_token 仅用于验证目的,而 access_token 用于获取对受保护资源的访问权限?

oauth-2.0 openid
5个回答
49
投票

最初,OAuth 和 OpenId 的设计目的不同:OpenId 用于身份验证,OAuth 用于授权。 OpenId Connect 是两者的统一,为两者服务,但不改变它们原有的功能。记住这一点,您应该能够自己找到答案。 ;-)

id_token 用于识别经过身份验证的用户,例如用于单点登录。 access_token 必须用于证明对受保护资源的访问权限,例如对于 OpenId Connect 中的 userinfo 端点。


7
投票

另一个角度提供答案:

id_令牌

  • id_token 是 JWT - 请记下这一点!
  • 它包含有关用户/资源所有者身份的声明
  • 拥有有效的 id_token 意味着用户已通过身份验证

访问令牌

  • access_token 是不记名令牌
  • 承载令牌意味着承载者无需进一步身份验证即可访问资源
  • access_token 可以是 JWT(请参阅附录点 1。)或不透明

如果您想了解更多信息:oidc 和 oauth 中的令牌类型


3
投票

access_token对于调用Auth0中的某些API(例如/userinfo)或您在Auth0中定义的API非常有用。

id_token是一个JWT,代表登录的用户。您的应用程序经常使用它。

是否可以同时使用 access_token 和 id_token 访问受保护的资源 ?

不完全,首先需要使用id_token登录,
其次,你会得到一个accessToken,
最后,使用accessToken来访问数据。


0
投票

OAuth 2 access_token VS OpenId Connect id_token

让我尝试以更具可比性的方式回答。

方面 OAuth 2.0 访问令牌 OpenID 连接 id_token
目的 访问受保护的资源 代表用户认证信息
发行 主要代币 与access_token一起发行
观众 资源服务器 客户端应用程序
格式 通常对客户不透明 可由客户端解析(通常是 JWT)
寿命 可以更长寿 有效期通常较短
安全 主要依赖于 TLS 由身份提供商的密钥签名
内容 可能不包含用户信息 包含身份验证和用户声明
使用方法 即使在用户离开后也能访问资源 代表单一认证事件
外用 传递给外部服务 未传递给外部服务
附加功能 不适用 可以包含c_hash和at_hash

我希望这能更好地帮助你!


-1
投票

这里有一篇文章描述了为什么引入 id_token 以及它的最初目的是什么:为什么我们在 OpenID Connect 和 Facebook Connect 中需要 id_token。简而言之,他们试图标准化 Facebook 使用的Hybrid Flow

我们考虑使用 id_token 作为 access_token。 我们拒绝了这个选项,因为:

  • 许多提供商都为端点提供了现有的 OAuth 令牌格式,这些格式很难更改。
  • 我们不希望长期访问令牌作为 cookie 存储在浏览器中。
  • 这两个令牌显然有不同的接收者,从长远来看,这两个令牌的语义超载会降低灵活性并增加复杂性。
© www.soinside.com 2019 - 2024. All rights reserved.