【问题标题】:Google OAuth: What do the various fields in id_token stand for?Google OAuth:id_token 中的各个字段代表什么?
【发布时间】:2015-09-14 23:11:01
【问题描述】:

我在 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)?

【问题讨论】:

    标签: oauth google-oauth openid-connect


    【解决方案1】:

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

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

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

    需要音频。
    此 ID 令牌的目标受众。
    它必须包含依赖的 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 可选。
    授权方 - 向其颁发 ID 令牌的一方。
    如果存在,它必须包含此 OAuth 2.0 客户端 ID 派对。仅当 ID Token 具有单个 受众价值,并且该受众与授权的受众不同 派对。即使授权方相同,也可以包括在内 作为唯一的观众。 azp 值是区分大小写的字符串 包含 StringOrURI 值。

    at_hash 可选。
    访问 Token 哈希值。
    它的值是base64url ASCII 八位字节散列的最左半部分的编码 access_token 值的表示,其中哈希算法 used 是 ID 的 alg Header 参数中使用的哈希算法 Token 的 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 布尔值
    如果最终用户的电子邮件地址已经过验证,则为真;否则为假。
    当此声明价值为真时,这意味着 OP 采取了积极措施以确保该电子邮件地址 验证时由最终用户控制 执行。验证电子邮件地址的方法是 特定于上下文,并取决于信任框架或 双方在其中运作的合同协议。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-21
      • 1970-01-01
      • 2018-10-17
      • 2015-04-19
      • 2012-03-31
      • 2020-04-25
      • 2017-07-02
      • 2015-11-08
      相关资源
      最近更新 更多