gcloud 身份令牌与访问令牌

MBH*_*nix 14 authentication google-authentication google-cloud-platform gcloud

gcloud auth print-access-token当我们使用和时,访问令牌和身份令牌有什么区别gcloud auth print-identity-token

在什么情况下我们可以在 Google Cloud 上下文中使用其中一种而不使用另一种。

为什么我们有print-access-tokenfor gcloud auth,而gcloud auth application-default我们print-identity-token只有forgcloud auth

Pri*_*dra 17

定义 and 在 Google 上下文中:

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

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

  • 在 Google 上下文中,OAuth 2.0 访问令牌对于验证从服务帐户到 Google Cloud API 的访问非常有用。

ID 令牌用于基于令牌的身份验证。这些令牌经过签名 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 auth 中的命令无关
  1. gcloud auth 应用程序默认打印访问令牌
  • 这将通过 Web 流获取您的凭据,并将它们存储在“应用程序默认凭据的众所周知的位置”。“应用程序默认凭据的众所周知的位置”是位于本地 ~/.config 中名为 application_default_credentials.json 的文件/gcloud/ 目录。现在,您运行的任何代码/SDK 都将能够自动找到凭据。当您想要本地测试通常在服务器上运行并使用服务器端凭据文件的代码时,这是一个很好的替代方法。在这些情况下,gcloud auth application-default print-access-token 的工作方式是使用用户身份进行身份验证(通过 Web 流),但使用凭据作为服务帐户的代理。
  1. gcloud auth 打印访问令牌
  • 显示当前服务帐户的访问令牌。
  1. gcloud auth 打印身份令牌
  • 打印指定帐户的身份令牌。如果未指定,将使用当前活动帐户。

  • Google 服务帐户和用户都可以获得 id_tokens,但有一个重要的区别:用户登录 oauth 流发出静态绑定到网络的 id_tokens 或与流关联的 oauth2 client_id。也就是说,如果用户登录涉及 oauth2 的 Web 应用程序,则提供商向浏览器颁发的 id_token 将具有绑定到 oauth2 client_id 的 aud: 字段。另一方面,服务帐户可以参与一个流程,在该流程中,它可以从 google 接收带有先前指定的 aud: 字段的 id_token。

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

  • 1/2)我喜欢你的回答。这里有一些花絮。1) Google 访问令牌是存储在 GCP 中的令牌的哈希值。这主要是为了快速查找,因为这些令牌几乎无处不在。2) 访问令牌也是身份验证的结果,但不提供授权身份(通常)。Azure 是一个例外,它包含大量身份和位置信息。3)ID令牌用于基于身份的授权(您提到了基于令牌的身份验证)。 (2认同)