用于身份断言的 ID 令牌或 /userinfo

Pan*_*nda 12 security oauth-2.0 openid-connect

在与提供者进行身份验证后,应用程序通常会代表用户同时收到 ID 令牌和访问令牌。现在似乎有两种方法可以断言用户是谁。

  1. 验证 ID 令牌,然后读取 ID 令牌。
  2. 将访问令牌传递给 userinfo 端点并读取 JSON 响应。

两者似乎都是可以接受的途径,但是在某些情况下是否应该使用其中一种?

Ján*_*aša 8

如果您有两个令牌并且 ID 令牌包含您需要的所有信息,则可以使用任何一种方式。以下是我想到的一些差异:

  • 无需访问其 OAuth2 服务器(如果您已在本地下载其证书)即可验证和读取 ID 令牌,这使其更快并且处理的可能错误更少 - 没有网络请求。
  • 如果用户信息经常更改,则 ID 令牌可能包含过时的数据,但几乎不会出现这种情况。
  • 访问令牌可以撤销(ID 令牌不能),因此如果您需要它,它们会做得更好。


Han*_* Z. 5

除了技术差异之外,还有语义差异:那里的id_token和 信息代表和标识经过身份验证的用户。该用户“在场”并登录到应用程序。

access_token从用户信息终端返回的信息代表关于谁发出的访问令牌的实体呈现它的用户信息。该用户不需要“存在”或登录(不再)。

Anid_token通常是“一次性使用”,并且access_token通常可以使用很短的时间。

现在,在用户使用 OpenID Connect 登录时同时发出和接收两个令牌的情况下,两者重叠。