Google OAuth:id_token中的各个字段代表什么?

时间:2015-06-28 12:03:53

标签: oauth google-oauth openid-connect

我在OAuth交换结束时获得的id_token具有以下内容:

"id_token": {  
   "aud":"xxx.apps.googleusercontent.com",
   "email_verified":true,
   "iss":"accounts.google.com",
   "email":"xxx@gmail.com",
   "iat":1234,
   "exp":1234,
   "azp":"xxx.apps.googleusercontent.com",
   "at_hash":"xxxy",
   "sub":"1243"
}

我想知道这些代表什么?更重要的是,我可以将这些字段中的哪一个用作主键(id)?

1 个答案:

答案 0 :(得分:6)

Google遵守定义id_token的OpenID Connect标准。因此,您可以在此处找到该规范中的含义:http://openid.net/specs/openid-connect-core-1_0.html#IDToken

  

是必需的。
  响应发布者的颁发者标识符   iss值是使用包含的https方案的区分大小写的URL   方案,主机,以及可选的端口号和路径组件,没有   查询或片段组件。

     

sub REQUIRED。
  主题标识符。
  发行人中的本地唯一且永不重新分配的标识符   最终用户,旨在由客户使用,例如,   24400320或AItOawmwtWwcT0k51BayewNvutrJUqsvl6qs7A4。它绝不是   长度超过255个ASCII字符。子值是一个案例   敏感的字符串。

     

需要听证会。
  此ID令牌用于的受众。
  它必须包含Relying的OAuth 2.0 client_id   派对作为观众价值。它还可以包含其他标识符   观众。在一般情况下,aud值是一个case数组   敏感字符串。在常见的特殊情况下,有一个   在观众中,aud值可以是单个区分大小写的字符串。

     

EXP   需要。 ID令牌不得在其上或之后的到期时间   接受处理。
  处理此参数需要   当前日期/时间必须在到期日期/时间之前   列在价值中。实施者可以提供一些小的余地,   通常不会超过几分钟,以解决时钟偏差。它的   value是一个JSON数字,表示来自的秒数   1970-01-01T0:0:0Z,以UTC为单位,直到日期/时间为止。请参阅RFC 3339   [RFC3339]有关一般日期/时间和UTC的详细信息   特定。需要的东西。 JWT颁发的时间。它的价值   是一个表示来自的秒数的JSON数字   1970-01-01T0:0:0Z,以UTC为单位,直到日期/时间为止。

     

需要的东西   JWT签发的时间   它的值是一个JSON数字,代表来自的秒数   1970-01-01T0:0:0Z,以UTC为单位,直到日期/时间为止。

     

azp可选。
  授权方 - 签发身份证令的一方   如果存在,它必须包含此的OAuth 2.0客户端ID   派对。仅当ID令牌具有单个时才需要此声明   观众价值和观众不同于授权   派对。即使授权方是相同的,也可以包含它   作为唯一的观众。 azp值是区分大小写的字符串   包含StringOrURI值。

     

at_hash OPTIONAL。
  访问令牌哈希值。
  它的值是base64url   编码ASCII的八位字节的最左半部分   access_token值的表示,其中哈希算法   used是ID的alg Header参数中使用的哈希算法   令牌的JOSE标题。例如,如果alg是RS256,则哈希   使用SHA-256的access_token值,然后取最左边的128位和   base64url对它们进行编码。 at_hash值是区分大小写的字符串。

此外,emailemail_verified是标准化声明,可在此处找到http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims

  

电子邮件字符串
  最终用户的首选电子邮件地址   它的价值必须   符合RFC 5322 [RFC5322] addr-spec语法。 RP绝不可以   依赖于这个值是唯一的,如第5.7节所述。

     

email_verified boolean
  如果最终用户的电子邮件地址已经过验证,则为True;否则是假的   当此声明值为true时,这意味着   OP采取了肯定的步骤来确保这个电子邮件地址   在验证时由最终用户控制   执行。验证电子邮件地址的方法是   特定于上下文,并依赖于信任框架或   双方合作的合同协议。

因此,您会注意到sub是主键,每个用户在一段时间内都是唯一的,至少在提供商的范围内。电子邮件不是,因为它可能会在某个时候重新分配。