Identity断言的ID令牌或/ userinfo

时间:2017-09-14 06:30:08

标签: security oauth-2.0 openid-connect

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

  1. 验证ID令牌,然后读取ID令牌。
  2. 将访问令牌传递给userinfo端点并读取JSON响应。
  3. 两者似乎都是可接受的途径,但是在某些场景中应该使用其中一种吗?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

除了技术差异之外,还存在语义差异:id_token和其中的信息表示并标识经过身份验证的用户。那个用户是"出现"并登录到该应用程序。

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

id_token通常是"一次性使用"并且access_token通常可以在短时间内使用。

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