【问题标题】:OAuth2 authentication for a Cloud function云功能的 OAuth2 身份验证
【发布时间】:2021-04-22 09:14:42
【问题描述】:

我需要从本地编写的 python 代码调用(OAuth - 客户端凭据流和授权代码流)http 云函数。

我在 GCP 项目上创建了 OAuth 2.0 客户端 ID。

以下代码用于获取访问令牌,但这是转到 google 登录页面时出现错误。 我们可以帮助了解如何从本地 python 代码调用云函数吗?任何示例或指导都会很有帮助。

从 google_auth_oauthlib 导入流程 oauthcredential = "client_secret.json" # OAuth 2.0 客户端 ID JSON launch_browser = True # 本地使用时,远程时为 False appflow = flow.InstalledAppFlow.from_client_secrets_file(oauthcredential,scopes=['https://www.googleapis.com/auth/userinfo.profile'])

如果启动浏览器: appflow.run_local_server() 别的: appflow.run_console()

凭证 = appflow.credentials

【问题讨论】:

    标签: google-cloud-platform google-cloud-functions


    【解决方案1】:

    要调用受保护的云函数,您需要身份令牌而不是访问令牌。您无法在代码中从您自己的用户凭据生成 id 令牌(仅使用 gcloud 命令行),并且您使用服务帐户密钥文件来实现此目的(这并不理想,如 I explain in this article)。

    在您的代码中,设置引用您的服务帐户密钥文件路径的GOOGLE_APPLICATION_CREDENTIALS 环境变量,然后您可以使用fetch_id_token 函数获取id 令牌

    【讨论】:

    • 感谢您的意见。事实上,我想将此云功能端点作为 API 公开给其他应用程序(GCP 之外),并通过 OAuth 进行身份验证,而无需服务帐户。这就是为什么我在寻找 AccessToken 而没有使用服务帐户的原因。你的想法?
    • 服务到服务调用吗? GCP 之外的服务调用 Cloud Functions?
    • 是的,这是服务到服务(非人工)调用。我们已将云功能配置为 Google API 网关。现在我们需要在没有服务帐户的情况下验证这些请求。我们能否在 API 网关端进行一些配置以与 Azure AD 或任何其他选项(例如:Okta)集成。请提供一些指导。
    • 请求发送者(外部虚拟机)能否通过 OAuth2 机制进行身份验证?用自己的IdP然后生成一个id_token(JWT)?类似于 Okta 或 AWS cognito 的东西
    猜你喜欢
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    相关资源
    最近更新 更多