尝试使用Firebase Admin SDK创建“自定义令牌”的“呼叫者没有权限”

杜布涅夫

错误

打电话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: '[email protected]'
});

从技术上讲,该值是从env var引用的,但我已经确认该值是正确的。

所使用的服务帐户具有以下角色:

roles/firebase.sdkAdminServiceAgent
roles/iam.serviceAccountTokenCreator

根据文档,创建自定义令牌所需的权限为iam.serviceAccounts.signBlobiam.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密钥文件时,此流程在本地工作。

服务器正在GKE上运行,以防可能是群集权限错误。

任何帮助将不胜感激!

编辑-已解决Hiranya的答案达到了目的-K8s部署已配置了一个服务帐户,其最初目的只是为了启用Cloud SQL代理。为该服务帐户提供serviceAccountTokenCreator角色可以解决此问题。

希兰亚·贾亚提拉卡

您需要确保授权了SDK的服务帐户(不是指定为的服务帐户serviceAccountId)具有令牌创建者角色。这是由Google应用程序默认凭据自动发现的服务帐户。如果是Cloud Functions,则此服务帐户名为{project-name}@appspot.gserviceaccount.com您需要找出GKE的等效服务帐户并将其授予令牌创建者角色。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Firebase Admin SDK-使用自定义字段创建用户

可以使用 firebase admin sdk 来验证自定义后端上的应用检查令牌吗?

Firebase Admin SDK:设置/合并自定义用户声明

如何使用#react-admin创建没有菜单侧栏(如登录页面)的自定义页面?

Firebase Admin SDK Android

django admin,使用自定义视图扩展admin

Firebase Admin SDK - 创建没有密码的用户是否安全?

如何使用 Sonata admin 创建自定义列表

由于服务帐户没有必要的权限,因此无法在Firebase云功能中创建自定义令牌

在firebase-database-dotnet中使用Firebase Admin SDK

Firebase Admin SDK:未获取访问令牌

Firebase Admin SDK使用提供程序创建用户

使用Firebase Admin SDK创建用户时获取匿名用户

Firebase Admin SDK:setCredential() 的 NoSuchMethodError

Firebase python admin sdk isNewUser()

Python Firebase Admin SDK - DefaultCredentialsError

Firebase JAVA admin sdk FirebaseAuthException

PERMISSION_DENIED:呼叫者没有权限

呼叫者没有权限。403

如何使用 python 使用 firebase admin sdk 验证登录

Firebase Admin SDK - 要求未定义

在 Keycloak 中使用自定义 Admin REST API 获取用户的 ID 令牌

如何从 Admin SDK 创建 Firebase 动态链接

使用自定义用户模型在admin中添加职员用户权限

使用刷新令牌对Firebase Admin进行身份验证

在节点中同时使用Firebase Admin SDK和Client SDK

具有Heroku的Firebase Admin SDK

如何在Spring MVC中使用Firebase Admin SDK

使用 firebase-admin SDK for go 重试失败的 FCM 消息