31

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

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

我的问题是是否可以同时使用 access_token 和 id_token 来访问受保护的资源?还是 id_token 仅用于验证目的而 access_token 用于访问受保护的资源?

4

4 回答 4

46

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

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

于 2013-10-18T07:20:34.367 回答
5

另一个角度来提供答案:

id_token

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

访问令牌

  • access_token 是不记名令牌
  • 不记名令牌意味着不记名可以访问资源而无需进一步识别
  • access_token 可以是 JWT(参见附录点 1)或不透明

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

于 2020-03-11T13:31:23.810 回答
3

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

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

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

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

于 2017-09-05T07:10:44.477 回答
0

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

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

  • 许多提供商都有现有的 OAuth 令牌格式,用于难以更改的端点。
  • 我们不希望将长期访问令牌作为 cookie 存储在浏览器中。
  • 这两个令牌的接收者显然是分开的,从长远来看,这两个令牌的语义过载会降低灵活性并增加复杂性。
于 2020-02-27T09:52:31.270 回答