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

ID token or /userinfo for Identity assertion

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

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

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

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

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

除了技术上的差异外,还有语义上的差异:id_token 和其中的信息代表并标识经过身份验证的用户。该用户是 "present" 并登录到应用程序。

access_token 和从 userinfo 端点返回的信息表示有关向呈现它的实体颁发访问令牌的用户的信息。该用户不需要 "present" 或登录(不再)。

一个id_token通常是"one-time usage",一个access_token通常可以短时间使用。

现在,如果用户使用 OpenID Connect 登录时同时发出和接收两个令牌,则两者会重叠。