【问题标题】:gcloud identity token vs access tokengcloud 身份令牌与访问令牌
【发布时间】:2021-10-09 19:32:58
【问题描述】:

当我们使用gcloud auth print-access-tokengcloud auth print-identity-token时,access-token和identity-token有什么区别?

在哪些情况下,我们可以在 Google Cloud 环境中使用一种而不使用另一种。

为什么我们有print-access-token 用于gcloud authgcloud auth application-default 而我们只有print-identity-token 用于gcloud auth

【问题讨论】:

  • 这是一个很好的问题,但我可以写一本小书来回答它。第一步是让您了解 OAuth 和 OIDC 令牌。共有三个(访问、身份和刷新)。然后查看 Google Cloud 服务所需的授权令牌(访问或身份)因服务和访问方法而异。 CLI 文档介绍了 gcloud authgcloud auth application-default 之间的区别。

标签: authentication google-cloud-platform gcloud google-authentication


【解决方案1】:

在 Google 上下文中的定义和和:

Access tokens(并不总是 JWT)用于通知 API,令牌的持有者已被授权访问 API 并执行一组预定的操作(由授予的范围指定)。

  • 决不能将访问令牌用于身份验证。访问令牌 无法判断用户是否已通过身份验证。

  • 在 Google 上下文中,OAuth 2.0 访问令牌可用于 验证服务帐号对 Google Cloud API 的访问。

ID tokens 用于基于令牌的身份验证。这些令牌是经过签名的 JSON Web 令牌 JWT,用于声明身份,不一定对资源进行任何隐式授权。这些令牌将仅声明调用者是谁,并且令牌发送到的任何服务都可以通过验证随 JWT 提供的签名有效负载来验证令牌的完整性。应用程序在用户成功通过身份验证后接收 ID 令牌,然后使用 ID 令牌并从中提取用户信息,然后可以使用这些信息来个性化用户体验。

  1. aud: 字段描述了创建此令牌的服务名称 调用。如果服务收到一个 id_token,它必须验证它的 完整性(签名)、有效性(是否过期)以及是否 aud: 字段 是它希望看到的预定义名称。如果名称不匹配, 服务应拒绝令牌,因为它可能是重播 用于另一个系统。
  2. 在 Google 上下文中,OIDC ID 令牌可用于验证 接受 OpenID Connect 的服务的服务帐户的身份。

考虑以下示例用例

  1. 访问令牌:

要获得项目的更高权限,服务管理员可以通过创建属于该服务帐户的 OAuth 2.0 访问令牌来模拟服务帐户来调用 Google Cloud API。令牌的生命周期很短,因此提升的权限是临时的。使用短期令牌可帮助您在身份和资源中实施最小特权原则。当生产环境中出现紧急情况并且服务管理员需要短期提升的调试权限时,它也很有用。

  1. ID 令牌:

通过创建属于服务帐号的 OIDC ID 令牌,在 Google Cloud 上运行的服务可以向部署在第三方云提供商上的另一项服务(例如数据管道作业)验证自己的身份。如果目标服务配置了OIDC,则认证成功。

开始使用 gcloud CLI 命令:

  • gcloud 凭据和应用程序默认凭据受管理 分开。
  • 如果您激活了服务帐户密钥文件,则该文件仅可用于 gcloud 命令,但不适用于应用程序默认凭据。
  • gcloud auth application-default 命令集仅用于 管理应用程序默认值,与中的命令无关 gcloud 身份验证
  1. gcloud auth 应用程序默认打印访问令牌
  • 这将通过 Web 流获取您的凭据并将它们存储在“ 应用程序默认凭据的知名位置。 应用程序默认凭据的众所周知的位置是一个文件 名为 application_default_credentials.json 位于您的本地 ~/.config/gcloud/ 目录。现在您运行的任何代码/SDK 都可以 自动找到凭据。这是一个很好的替身,当你 想要在本地测试通常在服务器上运行的代码,并且 使用服务器端凭据文件。在这些情况下,gcloud auth application-default print-access-token 使用它进行身份验证 用户身份(通过 Web 流),但使用凭据作为代理 服务帐号。
  1. gcloud auth 打印访问令牌
  • 显示当前服务帐户的访问令牌。
  1. gcloud auth print-identity-token
  • 打印指定帐户的身份令牌。如果没有指定, 将使用当前活动帐户。

  • Google 服务帐户和用户都可以获得 id_tokens,但需要使用 重要区别:用户登录 oauth 流程问题 id_tokens 静态绑定到 web 或 oauth2 client_id 流为 有关联。也就是说,如果用户登录到 Web 应用程序 涉及 oauth2,提供者向 浏览器会将 aud: 字段绑定到 oauth2 client_id。 另一方面,服务帐户可以参与其中的流程 它可以从 google 接收带有 aud: 字段的 id_token 早一点。

  • 您可以使用 gcloud 命令打印 identitytoken 以进行服务 帐户、模拟服务帐户和计算引擎实例。

【讨论】:

  • 1/2) 我喜欢你的回答。这里有一些花絮。 1) Google 访问令牌是存储在 GCP 中的令牌的哈希值。这主要是为了快速查找,因为这些标记几乎无处不在。 2)访问令牌也是身份验证的结果,但不提供授权身份(通常)。 Azure 是一个例外,它包含大量的身份和位置信息。 3) ID Tokens 用于基于身份的授权(您所说的基于令牌的身份验证)。
  • 2/2) 4) 您编写了gcloud 凭据和应用程序默认凭据分开管理。。我认为您的意思是 Google Cloud 凭据而不是 gcloud 凭据。 我认为您正在模糊凭据与使用/生成它们的应用程序之间的界限。 5) 这是不正确的如果您激活了服务帐户密钥文件,它只能用于 gcloud 命令,但不能用于应用程序默认凭据。.
  • 忽略我的观点 4。我想我误解了你的用词。 gcloud 一词用于太多项目。
  • 非常感谢@Priyashree 抽出宝贵时间写出详尽的答案。还要感谢约翰的 cmets !你摇滚人!
猜你喜欢
  • 2020-06-02
  • 2019-11-11
  • 2019-12-08
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 2023-01-29
  • 2019-01-13
相关资源
最近更新 更多