虽然之前我曾使用过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用于访问受保护资源吗?
答案 0 :(得分:37)
最初,OAuth和OpenId是为不同目的而设计的:OpenId用于身份验证,OAuth用于授权。 OpenId Connect是两者的统一,适用于两者,但不会改变其原始功能。记住这一点,你应该能够找到自己。 ; - )
id_token用于标识经过身份验证的用户,例如对于SSO。 access_token必须用于证明对受保护资源的访问权限,例如对于OpenId Connect中的userinfo端点。
答案 1 :(得分:3)
提供答案的另一个角度:
如果您想了解更多信息: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存储在浏览器中。
- 两个令牌的明显不同的接收者显然会使两个令牌的语义过载,从长远来看会降低灵活性并增加复杂性。