谷歌OAuth的id_token是什么?

72

我刚试着使用OAuth2和Google API,但只得到了以下结果。唯一的问题是:在文档中,我找不到id_token的用途。

{
  "access_token": "xxxx",
  "token_type": "Bearer",
  "expires_in": 3600,
  "id_token": "veryverylongstring",
  "refresh_token": "abcdefg"
}
2个回答

73

id_token是一个JSON Web Token(JWT)。如果您解码它,您将看到它包含多个声明,包括用户的ID。有关更多详细信息,请参见此答案


2
其他OAuth提供者(Facebook、Twitter等)是否支持类似的功能?我想要避免服务器与提供者之间来回的通信。 - Papipo

32

id_token是用于OpenID Connect协议的,在此协议中,用户通过身份验证和授权。 (在身份验证和授权之间有一个重要的区别。)您将获得id_tokenaccess_token

id_token值包含有关用户身份验证的信息。该ID令牌类似于标准JWT格式的身份证概念,由OpenID提供程序(OIDP)签名。为了获取ID令牌,客户端需要向其OIDP发送身份验证请求。

ID令牌的特点:

  1. 确认用户的身份,称为OpenID中的主题(sub)。
  2. 指定发行机构(iss)。
  3. 为特定受众生成,即客户端(aud)。
  4. 可能包含一次性使用的字符串(nonce)。
  5. 可能指定用户何时(auth_time)以及如何(acr),以强度(strength)术语进行身份验证。
  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
}

2
表述清晰,例子充分,所以加一分。我也稍微编辑了一下,希望你不介意。 - Konrad Viltersten
1
好的。谢谢。 - Nouman Dilshad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接