我想通过HTTP触发我的云功能,但也要通过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是什么呢?在文档中,我找不到手册方式,只能找到客户库文档。
我只能使用var请求=要求('request@2.56.0'(;让这一切发挥作用。我想问一下如何我能搞定吗?我可以呼叫一些身份验证服务正确的
Google没有提供一个可以调用的简单HTTP端点。如果您仔细考虑这个过程,您需要授权来调用生成授权凭据的端点。鸡和蛋的情况。
Google还不接受端点上的Auth0凭据来交换Google凭据。但是,请继续阅读有关WorkloadIdentity Federation的更多信息,它最终可以/可能提供这种功能。
对于创建一个可以生成Google Access或Identity Token的Auth0挂钩的目标,没有简单的答案。以下是详细信息,有助于了解可能发生的情况。
要从谷歌云服务帐户JSON密钥文件转到访问令牌,还需要库。这个过程是创建一个JWT,签署JWT,用JWT交换访问令牌。我写了一篇文章,展示了如何在Python中做到这一点。Node.js的过程类似。您的问题是这个过程对于Auth0钩子来说太复杂了。
谷歌云-为REST API调用创建OAuth访问令牌
谷歌最近推出了谷歌工作负载身份联合会,该联合会支持通过联合会和服务帐户模拟将OIDC令牌交换为谷歌OAuth访问令牌。这个过程只是一系列HTTP方法调用。我正在写几篇关于如何做到这一点的文章,但我现在还没有写完。
从OIDC身份提供商访问资源
一种可能性是创建另一个云函数或云运行服务,您可以在为您创建令牌的单个HTTPGET中调用该服务。这样你就可以使用谷歌客户端库。您的函数/运行代码将接收一个HTTPGET请求,与客户端库接口以创建访问令牌,并将该令牌作为HTTPGET响应返回。然而,这就造成了"鸡和蛋"的局面。您需要将请求授权给函数/运行代码才能获得访问令牌。
您可能需要更改策略,转而禁用云功能授权,并验证代码中的Auth0身份令牌,并跳过基于谷歌的授权。
Auth0:验证ID令牌
Auth0:验证JSON Web令牌
请注意您选择的任何流程,因为获得正确和安全的授权并不容易。
注意:您的问题说明";我想通过HTTP触发我的云功能";。我不确定你打算用什么方法。如果您使用的是云功能授权,则需要OAuth身份令牌。这为这个过程增加了更多的步骤。我还没有弄清楚如何使用WorkloadIdentity Federation来做到这一点,但函数/运行代码可以很容易地为您处理这一点。
总之,云函数适用于无服务器框架中的小型、轻量级代码。一旦添加了授权,复杂性就会增加。只要你坚持使用谷歌云授权,一切都很容易。一旦你尝试从一个身份系统(Auth0(转移到另一个(Google Cloud IAM(,复杂性就会急剧增加。