【问题标题】:Authenticating CloudRun with Access Token for Developers为开发人员使用访问令牌对 CloudRun 进行身份验证
【发布时间】:2020-11-18 03:33:16
【问题描述】:

我正在尝试连接到使用 Cloud Run(托管)运行的服务。该实例不是公开的,仅在开发中。因此,我使用 id 令牌进行身份验证,以验证此 link 中给出的连接。

我看到他们在这里使用身份令牌而不是访问令牌来发出请求。这是为什么 ?还有没有办法我可以使用访问令牌?

【问题讨论】:

    标签: google-cloud-platform google-cloud-run google-iam google-cloud-iam


    【解决方案1】:

    访问令牌适用于 Google 自己的 API (*.googleapis.com)。例如,Google 身份(服务帐户、用户帐户)的访问令牌允许他们调用 Google 的 API。

    但是,“身份令牌”是您持有该帐户的证明。这些仍然是令牌,但它们已由 Google 签名以证明。您不能使用这些 API 调用 Google。

    想象一下这种情况:有人入侵了您调用的私人服务。但是该 Cloud Run 服务无权执行任何操作。如果您发送了您的 access_token,他们可以拦截并提取它以在“调用者”服务的许可下进行 API 调用。但是,如果您发送您的 identity_token,除了证明“呼叫者”就是它声称的身份之外,它无法用于任何其他用途。

    如果您在使用身份令牌时遇到问题,请随时提出另一个问题。

    【讨论】:

      【解决方案2】:

      除了Ahmet的回答(关于身份令牌和访问令牌的区别),我想补充一些见解

      • 您无法在您的代码中使用您的用户凭据生成身份令牌(至少是 Google 签名的身份令牌,被 Google 前端接受
      • 因此,您需要有一个服务帐户密钥文件才能在您的代码中生成身份令牌
      • 解决方法是使用gcloud auth print-identity-token 命令并将结果传递给您的应用程序并在您的代码中使用它 -> 但是您在本地执行代码与您的用户帐户(以及 gcloud 命令技巧)之间失去了一致性,以及使用服务帐号在 GCP(或其他地方)上执行代码。

      希望这有助于了解如何继续前进。

      【讨论】:

      • 也许我读错了您的答案,但您可以从用户帐户凭据(Google 帐户、G Suite 等)生成身份令牌。生成身份令牌不需要服务帐户。
      • @JohnHanley。你是对的。您可以生成身份令牌, Google 前端不接受它(不接受自签名)
      • 从 Google 用户帐户生成的身份令牌不是自签名的。它们由 Google 签名。使用 OAuth 进行身份验证时,您可以选择接收三个令牌(访问令牌、身份令牌和刷新令牌)。
      • @JohnHanley,我从未成功使用我的 Google 用户凭据(使用应用程序默认凭据)生成有效的身份令牌。即使是库,当它们检测到用户凭据时也不允许生成身份令牌(通过 Java 和 Python 中的继承,该方法不可用)。我知道你是一个安全大师,如果你有一个示例(魔法)代码来实现这一点,我会给你送一盒法国葡萄酒!! :) :) :)
      • 我不是在谈论使用 CLI,而是在谈论 Google OAuth 2.0 Flow。我有如何在我的网站上生成身份令牌的示例,另外我不久前通过电子邮件向您发送了 node.js 的示例 IIRC。
      猜你喜欢
      • 2016-06-18
      • 2014-02-11
      • 2023-03-20
      • 1970-01-01
      • 2013-05-08
      • 2017-04-11
      • 2017-12-24
      • 2023-01-29
      • 1970-01-01
      相关资源
      最近更新 更多