【问题标题】:Purpose of ID tokenID令牌的用途
【发布时间】:2019-10-31 10:28:25
【问题描述】:

RP 从 OP 接收令牌(ID/访问/刷新令牌)并验证 ID 令牌后,RP 是否应将 ID 令牌存储在资源所有者的会话中?

如果是,使用 ID 令牌的目的是什么?

我认为应该出于以下原因存储访问和刷新令牌,例如:

  • 访问令牌:用于从 Userinfo 端点获取用户信息。
  • 刷新令牌:用于获取访问令牌后的另一个访问令牌 已过期。

【问题讨论】:

    标签: openid-connect


    【解决方案1】:

    答案取决于身份提供者(Google、Auth0、IBM、Twitter 等)。

    在 OAuth 2.0 中,返回两个令牌:访问令牌和可选的刷新令牌。

    访问令牌用于授权访问。这可能允许也可能不允许您从 userinfo 端点访问身份信息。身份令牌确实包含此信息。访问令牌可以是不透明的令牌,这意味着令牌中没有存储可以解码的信息,也可以是签名的 JWT。信息的数量和类型是特定于身份提供者的。访问令牌是短暂的,通常会在 3600 秒后过期。 Access Token不需要存储,除了本地缓存,因为过期后就没有价值了。

    刷新令牌用于创建新的访问令牌。结合 OAuth 2.0 Client ID 和 Client Secret,您可以创建 Access Tokens,直到 Refresh Token 过期或失效。

    OIDC (OpenID Connect) 在 OAuth 2.0 之上添加身份。 OIDC 提供一个身份令牌,该身份令牌提供 OAuth 范围请求的用户信息,并由拥有该身份的用户批准。大多数身份提供者通过他们的 OAuth 实现来实现 OIDC。身份令牌也会过期并且可以撤销。

    在 Google Cloud 中,您可以使用身份令牌来提供基于身份的访问。您将具有角色的身份(电子邮件地址)分配给服务(计算引擎实例或云存储对象)。如果 HTTP 标头“Authorization: Bearer”存在、有效且与电子邮件地址匹配,则根据分配给该服务的身份的角色授予访问权限。

    将 OAuth 令牌存储在 Web 会话中是一种糟糕的安全做法,除非每个会话都进行唯一加密。更好的做法是将 OAuth 令牌存储在数据库中,并在需要时使用存储在 Web 会话中的不透明 ID 进行查找。

    并非所有身份提供者都支持所有 OAuth 授权类型的刷新令牌。这称为“离线”访问,可能会被拒绝,这意味着一旦访问令牌过期,用户将需要再次授权您的应用。

    【讨论】:

    • 感谢您的回答,但我想了解 ID 令牌(不是访问或刷新令牌)。验证完成后是否需要使用 ID 令牌?
    • 我确实在“OIDC”下回答了您的问题。但是,您提到的访问令牌和刷新令牌也有错误信息。对于您的评论,一旦您验证了 ID 令牌,您将根据需要处理内容。 ID 令牌不提供访问权限(某些系统确实允许访问),它提供身份。您可以创建没有特权(访问权限)的身份令牌和访问令牌。例如,当您只想知道用户的电子邮件地址时。
    • 我修改了答案,以包含有关在 Google Cloud 中使用身份令牌的更多信息作为示例。
    • 谢谢。你能告诉我描述"In Google Cloud, you can use the Identity Token to provide Identity Based Access."的网址吗?
    • 有很多链接和服务。使用谷歌搜索。我写了一篇关于这个主题的文章,可以帮助你入门:jhanley.com/google-cloud-run-identity
    猜你喜欢
    • 1970-01-01
    • 2019-11-11
    • 2020-01-10
    • 2019-04-15
    • 1970-01-01
    • 2022-11-10
    • 2020-09-24
    • 1970-01-01
    • 2018-05-28
    相关资源
    最近更新 更多