我在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)?
答案 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值是区分大小写的字符串。
此外,email
和email_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
是主键,每个用户在一段时间内都是唯一的,至少在提供商的范围内。电子邮件不是,因为它可能会在某个时候重新分配。