【问题标题】:How to protect my http-triggered GCP Function with oauth/jwt?如何使用 oauth/jwt 保护我的 http 触发的 GCP 功能?
【发布时间】:2020-09-30 02:29:24
【问题描述】:

使用 AWS Lambda 和 API Gateway,我可以部署一个使用 http 公开的函数。

使用 Cognito 和 API Gateway,我可以使用 oauth2 和 jwt 令牌保护函数。


使用 GCP Function 和 http-trigger 选项,我可以部署一个使用 http 公开的函数。

是否可以使用“GCP Cognito 替代方案”来使用 oauth2 和 jwt 令牌保护我的功能?


我已尝试使用“身份平台”。我可以通过以下方式获得(不是 jwt)令牌: https://accounts.google.com/o/oauth2/v2/auth?client_id=[myclient id]&redirect_uri=[我的重定向uri]&response_type=token&scope=openid

但这给了我一个 401 : curl -L -v -XGET --header "Authorization: Bearer [the not jwt token]"https://europe-west2-[my project].cloudfunctions.net/my-hello-function"

谢谢!

【问题讨论】:

  • 我认为您对 JWT、OAuth 访问令牌和 OAuth 身份令牌(它们是签名的 JWT)感到困惑。使用身份令牌而不是 JWT,而不是访问令牌。身份令牌是由 Google 证书签名的 Google 身份。您的示例创建了 OAuth 访问令牌和身份令牌。解析返回的数据并提取身份令牌(id_token)。您的示例使用返回的 OAuth 访问令牌(没有身份信息)。

标签: google-cloud-platform oauth-2.0 jwt google-cloud-functions


【解决方案1】:

如果您想使用 Cloud Identity Platform,即 Firebase Auth 的 Google Cloud 封装,您可以使用 Cloud Endpoint,它是一个接受 API Key 和 firebase auth OAuth2 令牌的 API 网关。

我wrote an article 解释如何使用 API 密钥保护您的无服务器产品(Cloud Function、Cloud Run 和 App Engine)。但只需更新security definition with the firebase,它应该可以工作!

【讨论】:

  • 看起来很有希望。我需要在 terraform 模块中进行尝试。我明天试试这个!谢谢
  • 该死,“Cloud Endpoints”需要一个容器来为“Cloud Functions”提供api管理。我想我必须检查每个函数中的令牌...
  • Google 正在构建基于 Cloud Endpoint 和 ESP(可扩展服务代理)的托管产品。至少相同的功能,也许更多。我对此没有任何时间表,但它会解决您当前的问题。
【解决方案2】:

您可以使用IAM roles 将manage access 连接到HTTP 云函数。您需要将 roles/cloudfunctions.invoker 角色分配给服务帐户,并让调用者在 Authorization 标头中向函数提供 oauth 凭据。

最相关的演练可以阅读here。

【讨论】:

  • IAM 角色是识别用户(如客户)的好选择吗?在我看来,IAM 是识别同事的好选择,更像是 LDAP。
  • 如果您需要最终用户身份验证,IAM 可能不是您想要的。您将需要编写代码以在函数中手动检查令牌并确定用户是否应该能够执行函数所做的事情。 Cloud Functions 没有用于处理 IAM 之外的身份验证系统的基础架构。
  • 当然我需要在每个函数中手动检查令牌内容(范围或角色),但我希望令牌有效性(签名、时间戳等)签入一个地方(可能在平台的边缘)。但如果没有“就绪”工具,我将尝试使用此处描述的“云端点”:cloud.google.com/endpoints/docs/openapi/…(感谢@guillaume-blaquiere 的提示!)
猜你喜欢
  • 1970-01-01
  • 2019-12-27
  • 2020-03-04
  • 2018-03-16
  • 2018-09-27
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多