【问题标题】:Make authenticated calls to auth-protected GCP Cloud Functions from Python script从 Python 脚本对受身份验证保护的 GCP 云函数进行经过身份验证的调用
【发布时间】:2022-06-13 08:46:44
【问题描述】:

我有一个 GCP 云函数,它验证 Firebase 身份验证的身份验证,即寻找具有 idToken 值的 Authentication 标头。我想编写一个脚本,允许用户进行身份验证并调用该函数。这是我目前拥有的:

from google_auth_oauthlib import flow
import httpx

appflow = flow.InstalledAppFlow.from_client_secrets_file(
    'client_secret.apps.googleusercontent.com.json',
    scopes=['openid',
            'https://www.googleapis.com/auth/userinfo.email',
            'https://www.googleapis.com/auth/userinfo.profile'],
)
creds = appflow.run_local_server()
print(creds.valid)

response = httpx.post(
    'https://us-central1-myproject.cloudfunctions.net/myfunction',
    headers={'Authorization': 'Bearer ' + creds.id_token}
)
print(response.status_code)
print(response.text)

在调用脚本并使用有效用户登录时,我从 Cloud Function 收到 Unauthorized 错误,并且 Cloud Function 似乎无法对 creds.id_token 进行身份验证。

我错过了什么?


编辑

在后端,我解码了verifyIdToken 错误并得到以下信息:

Firebase ID 令牌的“aud”(受众)声明不正确。

我认为这个 ID 令牌不正确。

【问题讨论】:

  • 验证 creds.id_token* 是否有效(存在)。
  • 是的,我在那里看到了很好的价值,并且能够使用token.dev对其进行解码
  • 该令牌中的身份是否在资源(云功能)中获得授权,以及在资源上为该身份分配了哪些 IAM 权限?
  • 管理员权限(我是该 GCP 项目的管理员)。可能与请求范围有关吗?
  • 如果您将身份令牌放入授权标头中,Google 前端 (GFE) 将验证该令牌并在某些情况下修改 ID 令牌。我不确定如果令牌有效会发生什么,但你有一个公共功能。在任何情况下,您都不应该将 HTTP Authorization 标头用于您自己的目的。选择不同的标题名称。

标签: python google-cloud-platform firebase-authentication


猜你喜欢
  • 2021-11-18
  • 2014-11-20
  • 2017-09-18
  • 2013-01-27
  • 2018-09-27
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多