gcloud 身份令牌与访问令牌

gcloud identity token vs access token

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

在什么情况下我们可以在 Google 云环境中使用一个而不是另一个。

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

定义 and and 在 Google 上下文中:

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

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

  • 在 Google 上下文中,OAuth 2.0 访问令牌可用于 验证从服务帐户到 Google Cloud APIs.

    的访问

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 APIs。令牌的生命周期很短,因此提升的权限是临时的。使用短期令牌可帮助您在您的身份和资源中实施最小特权原则。当生产环境出现紧急情况,服务管理员需要短期提升权限进行调试时,它也很有用。

  1. ID 令牌:

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

即将使用 gcloud CLI 命令:

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

  • Google 服务帐户和用户都可以获得 id_token,但 重要区别:用户登录 oauth 流程问题 id_tokens 静态绑定到网络或 oauth2 client_id 流为 有关联。也就是说,如果用户登录到 Web 应用程序 涉及 oauth2,提供者发布给 浏览器会将 aud: 字段绑定到 oauth2 client_id。 另一方面,服务帐户可以参与流程 它可以从 google 接收一个 id_token 并指定一个 aud: 字段 早些时候。

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