OAuth 2 access_token vs OpenId Connect id_token

时间:2013-10-10 10:52:42

标签: api oauth-2.0 openid

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

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

我的问题是是否可以使用access_token和id_token来访问受保护资源?或者id_token仅用于验证目的,access_token用于访问受保护资源吗?

4 个答案:

答案 0 :(得分:37)

最初,OAuth和OpenId是为不同目的而设计的:OpenId用于身份验证,OAuth用于授权。 OpenId Connect是两者的统一,适用于两者,但不会改变其原始功能。记住这一点,你应该能够找到自己。 ; - )

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

答案 1 :(得分:3)

提供答案的另一个角度:

id_token

  • 一个id_token是一个JWT-记录下来!
  • 其中包含有关用户/资源所有者身份的声明
  • 具有有效的id_token意味着用户已通过身份验证

access_token

  • access_token是不记名令牌
  • 承载令牌表示承载无需进一步标识即可访问资源
  • access_token可以是JWT(请参阅附录第1点),也可以是不透明的

如果您想了解更多信息:Types of tokens in oidc and oauth

答案 2 :(得分:2)

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

id_token 是JWT并代表登录用户。它经常被您的应用使用。

  

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

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

答案 3 :(得分:0)

这里有一篇文章介绍了为什么引入id_token及其最初的目的:Why we need a id_token in OpenID Connect & Facebook Connect。简而言之,他们试图标准化Facebook使用的Hybrid Flow

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

  • 许多提供商对于那些很难更改的端点都有现有的OAuth令牌格式。
  • 我们不希望将长期访问令牌作为cookie存储在浏览器中。
  • 两个令牌的明显不同的接收者显然会使两个令牌的语义过载,从长远来看会降低灵活性并增加复杂性。