gpt4 book ai didi

node.js - "Caller does not have permission"尝试使用 Firebase Admin SDK 创建自定义 token

转载 作者:行者123 更新时间:2023-12-03 12:10:24 25 4
gpt4 key购买 nike

错误
打电话时admin.auth().createCustomToken()我收到以下错误:

Error: The caller does not have permission; Please refer to https://firebase.google.com/docs/auth/admin/create-custom-tokens for more details on how to use and troubleshoot this feature.


提供的文档让我相信我用来初始化 Firebase Admin SDK 的服务帐户没有足够的权限。我不相信是这种情况,所以我想问一下,看看我是否遗漏了什么。
配置
Firebase Admin SDK 在后端初始化,如下所示:
admin.initializeApp({
serviceAccountId: 'firebase-adminsdk-xxxxx@my-project-id.iam.gserviceaccount.com'
});
从技术上讲,该值是从 env var 引用的,但我已确认此值是正确的。
正在使用的服务帐户具有以下角色:
roles/firebase.sdkAdminServiceAgent
roles/iam.serviceAccountTokenCreator
根据文档,创建自定义 token 所需的权限是 iam.serviceAccounts.signBlob .此权限是 iam.serviceAccountTokenCreator 的一部分根据此输出的角色:
❯ gcloud beta iam roles describe roles/iam.serviceAccountTokenCreator
description: Impersonate service accounts (create OAuth2 access tokens, sign blobs
or JWTs, etc).
etag: AA==
includedPermissions:
- iam.serviceAccounts.get
- iam.serviceAccounts.getAccessToken
- iam.serviceAccounts.getOpenIdToken
- iam.serviceAccounts.implicitDelegation
- iam.serviceAccounts.list
- iam.serviceAccounts.signBlob
- iam.serviceAccounts.signJwt
- resourcemanager.projects.get
- resourcemanager.projects.list
name: roles/iam.serviceAccountTokenCreator
stage: GA
title: Service Account Token Creator
最后,出现错误的相关代码如下:
try {
const loginToken = await admin.auth().createCustomToken(uid);
return response(200).json({ loginToken });
} catch (err) {
...
}
uid 来自通过 GoogleUser 凭据登录用户 - 确认提供的 uid 是准确的,当引用同一服务帐户的 JSON key 文件时,此流程在本地工作。
服务器正在 GKE 上运行,以防它可能是集群权限错误。
任何帮助将不胜感激!
编辑 - 已解决
Hiranya 的回答解决了问题——K8s 部署配置了一个服务帐户,其最初的目的只是为了启用 Cloud SQL 代理。为这个服务帐户提供 serviceAccountTokenCreator 角色解决了这个问题。

最佳答案

您需要确保 SDK 授权的服务帐户(不是指定为 serviceAccountId 的服务帐户)具有 token 创建者角色。这是 Google Application Default Credentials 自动发现的服务帐户。对于 Cloud Functions,这是名为 {project-name}@appspot.gserviceaccount.com 的服务帐户.您需要找出 GKE 的等效服务帐户并授予它 token 创建者角色。

关于node.js - "Caller does not have permission"尝试使用 Firebase Admin SDK 创建自定义 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63385595/

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