63

当我尝试对 googleapi 执行 oauth2 时,我刚刚得到以下结果。只有一件事:我在文档中找不到 id_token 的用途。

{
  "access_token": "xxxx",
  "token_type": "Bearer",
  "expires_in": 3600,
  "id_token": "veryverylongstring",
  "refresh_token": "abcdefg"
}
4

2 回答 2

68

id_token 是 JSON Web 令牌 (JWT)。如果您对其进行解码,您会看到它包含多个断言,包括用户的 ID。有关更多详细信息,请参阅此答案

于 2012-12-17T21:06:05.257 回答
16

id_token在 OpenID Connect 协议中,在该协议中用户被认证和授权。(身份验证和授权之间有一个重要区别。)您将获得id_tokenaccess_token

id_token值包含有关用户身份验证的信息ID 令牌类似于身份卡的概念,采用标准 JWT 格式,由 OpenID 提供者 (OIDP) 签名。要获得一个,客户端需要通过身份验证请求将用户发送到他们的 OIDP。

ID令牌的特点:

  1. 断言用户的身份,在 OpenID (sub) 中称为主题。
  2. 指定颁发机构 (iss)。
  3. 为特定受众生成,即客户 (aud)。
  4. 可能包含一个随机数(nonce)。
  5. 可以根据强度 (acr) 指定何时 (auth_time) 以及如何对用户进行身份验证。
  6. 有问题 (iat) 和过期时间 (exp)。
  7. 可能包括有关主题的其他请求详细信息,例如姓名和电子邮件地址。
  8. 已进行数字签名,因此可以由预期的收件人进行验证。可以选择对机密性进行加密。

ID 令牌语句或声明被打包在一个简单的 JSON 对象中:

{
  "sub"       : "alice",
  "iss"       : "https://openid.c2id.com",
  "aud"       : "client-12345",
  "nonce"     : "n-0S6_WzA2Mj",
  "auth_time" : 1311280969,
  "acr"       : "c2id.loa.hisec",
  "iat"       : 1311280970,
  "exp"       : 1311281970
}
于 2019-02-22T07:02:02.973 回答