gpt4 book ai didi

oauth - 如何使用谷歌服务帐户和 oauth 限制对我的谷歌云功能的调用?

转载 作者:行者123 更新时间:2023-12-04 01:35:26 39 4
gpt4 key购买 nike

我有一个云函数,我想从当前在 Heroku 上运行的 Rails 应用程序调用。我为 Rails 应用程序设置了一个服务帐户,并且 could 函数由 HTTP 请求部署和触发。我想将对云功能的调用限制在 Rails 应用程序中,并计划在 this documentation 之后使用服务器到服务器的双腿 OAuth 2.0来自谷歌。

不过,当我设置服务帐户时,我需要提供一个范围。根据列表available scopes唯一引用 Cloud Functions 的范围允许管理云功能,而我希望范围仅涵盖调用。

文档中使用的语言是指用于定义对 Google API 的访问的范围。

  • 从这个意义上说,我的云函数是否符合 Google API 的条件?
  • 否则,由于范围是 URL,我可以只提供我的云函数的 URL 作为范围吗?

最佳答案

是的,我设法从几个不同的 Google 文档页面拼凑了这个过程,即

  1. https://cloud.google.com/iap/docs/authentication-howto#authenticating_from_a_service_account
    • 错误地指示您自行签署您的 JWT,这显然行不通,因为这样任何人都可以签署他们自己的 JWT 并访问您的云功能
  2. https://cloud.google.com/functions/docs/securing/authenticating#service-to-function
    • 此示例不会告诉您在初始 JWT 声明中设置哪些受众
  3. https://developers.google.com/identity/protocols/OAuth2ServiceAccount#authorizingrequests
    • 错误描述了 JWT 声明内容和签名过程
    • alternate method直接使用服务帐户签名的 JWT 作为不记名 token 不适用于调用云功能,我猜是因为它们不是谷歌 API

这是对我有用的

  1. 使用以下数据编码 JWT。主要技巧是设置 aud到 OAuth 端点,设置 sub到服务帐户的电子邮件(即使没有用户可以模拟),以及 target_audience到 Cloud Functions 的 URL(根据文档 #1),但遵循文档 #3 中的一般流程。

    {
    "aud": "https://www.googleapis.com/oauth2/v4/token",
    "sub": "<your service account's email style identifier>",
    "iss": "<your service account's email style identifier>",
    "target_audience": "<the URL of the cloud function you're trying to call>",
    "exp": <unix epoch timestamp + 3600 as an integer>,
    "iat": <unix epoch timestamp as an integer>
    }
  2. Base64 对声明进行编码。 Base64 编码声明 header 集 ( {"alg":"RS256","typ":"JWT"} ) 并将结果与​​句点 header.claim 组合,根据文档 #3 中的通用说明。你应该得到这样的东西:eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI3NjEzMjY3OTgwNjkt... .与文档 #3 相反,您不需要 kid在标题中。

  3. 使用服务帐户私钥与您喜欢的 JWT 库签署 JWT

  4. 通过对 https://www.googleapis.com/oauth2/v4/token 进行 POST 调用,将您的服务帐户签名的 JWT 交换为来自 Google 的 OAuth 系统的访问 token 用Authorization: Bearer <signed JWT base64 encoded string>和以下两个字段形成编码数据:

    • grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
    • assertion: <signed JWT base64 encoded string, YES you use it twice>
  5. 如果一切顺利,您应该会收到一个包含 key id_token 的 JSON 响应。 ,您可以在 Authorization: Bearer <id_token> 中使用它当您调用 CloudFunction 时

关于oauth - 如何使用谷歌服务帐户和 oauth 限制对我的谷歌云功能的调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59772826/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com