【发布时间】: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