如何在没有客户端库但仅使用 HTTP Post 的情况下验证为 Google 服务帐户?

How to authenticate as Google service account without a client library but only with HTTP Post?

我想通过 HTTP 触发我的 Cloud Function,但也通过 IAM 和我因此创建的服务帐户 auth0-hook 进行身份验证。

我生成了一个这样的私钥:

gcloud iam service-accounts keys create ~/.gcp-keys/auth0-hook-sa.key.json     --iam-account=auth0-hooks@my-platform.iam.gserviceaccount.com

并将此服务帐户应用于我的云功能。

在外部 - 在 Auth0 Hook 代码中 - 我知道需要先获取凭据并将获取的令牌与 POST 请求一起发送到 Cloud Function 端点。

我的问题是我不能不能使用任何Google Auth 客户端库(在本例中为Node.js),因为Auth0 Hooks 不能导入任何花哨的库。

我在此坚持只使用 var request = require('request@2.56.0'); 来完成这一切。 我想问一下我该如何管理?我可以调用一些身份验证服务吗?但是那个 API 是什么?在文档中,我找不到 manual 方式,只能找到客户端库文档。

I am hereby stuck with only using var request = require('request@2.56.0'); to make this all work. I'd like to ask how I can manage this? There is some authentication service I can call right?

Google 不提供您可以调用的简单 HTTP 端点。如果您仔细考虑整个过程,则需要授权来调用生成授权凭据的端点。先有鸡还是先有蛋的情况。

Google 尚未在端点接受 Auth0 凭据以交换 Google 凭据。但是,请继续阅读有关 Workload Identity Federation 的更多信息,can/might 最终会提供该功能。

创建可生成 Google 访问或身份令牌的 Auth0 挂钩的目标没有简单的答案。以下是帮助理解可能发生的事情的详细信息。

从 Google 云服务帐户 JSON 密钥文件到访问令牌还需要库。这个过程是创建一个 JWT,签署 JWT,用 JWT 交换访问令牌。我在 Python 中写了一篇文章来展示如何做到这一点。 Node.js 的过程类似。你的问题是这个过程对于 Auth0 挂钩来说太复杂了。

Google Cloud – Creating OAuth Access Tokens for REST API Calls

Google 最近引入了 Google Workload Identity Federation,它支持通过联合和服务帐户模拟将 OIDC 令牌交换为 Google OAuth 访问令牌。该过程只是一系列 HTTP 方法调用。我正在撰写多篇关于如何做到这一点的文章,但我现在还没有完成。

Accessing resources from an OIDC identity provider

一种可能性是创建另一个 Cloud Function 或 Cloud 运行 服务,您可以在单个 HTTP GET 中调用它来为您创建令牌。这样您就可以使用 Google 客户端库。您的 Function/Run 代码将接收 HTTP GET 请求,与客户端库交互以创建访问令牌和 return 令牌作为 HTTP GET 响应。 然而,这就造成了先有鸡还是先有蛋的局面。您需要将请求授权给 Function/Run 代码以获取访问令牌。

您可能想要更改策略,而是禁用 Cloud Functions 授权并在您的代码中验证 Auth0 身份令牌并跳过基于 Google 的授权。

Auth0: Validate ID Tokens

Auth0: Validate JSON Web Tokens

请注意您选择的任何流程,因为获得正确和安全的授权并不容易。

注意:您的问题是“我想通过 HTTP 触发我的云功能”。我不确定你打算使用什么方法。如果您使用 Cloud Functions Authorization,则需要 OAuth Identity Token。这为流程增加了更多步骤。我还没有弄清楚如何使用 Workload Identity Federation 来做到这一点,但是 Functions/Run 代码可以轻松地为您处理。

总而言之,Cloud Functions 适用于无服务器框架中的小型轻量级代码。一旦添加授权,复杂性就会增加。只要您坚持 Google 云授权,一切都很简单。一旦您尝试从一个身份系统 (Auth0) 转到另一个身份系统 (Google Cloud IAM),复杂性就会急剧上升。