7

调用时admin.auth().createCustomToken(),我收到以下错误:

需要权限 iam.serviceAccounts.signBlob 才能对服务帐户项目/-/serviceAccounts/kaleido-maastricht@appspot.gserviceaccount.com 执行此操作。请参阅https://firebase.google.com/docs/auth/admin/create-custom-tokens了解有关如何使用此功能和排除故障的更多详细信息。

所以我去查看云平台控制台的IAM部分中提到的服务帐户,它具有Editor角色,确实没有signBlob权限。我可以将其更改为什么角色来解决此问题?我尝试创建基于Editor的自定义角色,但是无法将createBlob权限添加到自定义角色。

4

3 回答 3

14

您链接到的文档页面底部有一个故障排除部分。你被指示在那里阅读以寻求帮助。它说:

如果用于签署令牌的服务帐户 ID 没有 iam.serviceAccounts.signBlob 权限,您可能会收到如下错误消息:

Permission iam.serviceAccounts.signBlob is required to perform this
operation on service account
projects/-/serviceAccounts/{your-service-account-id}.

解决此问题的最简单方法是将“服务帐户令牌创建者”IAM 角色授予相关服务帐户:

  1. 在 Google Cloud Platform Console 中打开 IAM 和管理页面。
  2. 选择您的项目并单击“继续”。
  3. 单击与您要更新的服务帐户 ID 对应的编辑图标。
  4. 单击“添加另一个角色”。
  5. 在搜索过滤器中键入“Service Account Token Creator”,然后从结果中选择它。
  6. 单击“保存”以确认角色授予。

有关此过程的更多详细信息,请参阅 IAM 文档,或了解如何使用 gcloud 命令行工具更新角色。

于 2019-01-06T23:48:41.730 回答
6

我遇到了同样的错误,并且可以看到服务帐户在 GCP IAM 控制台 UI 中具有“服务帐户令牌创建者”角色。

什么为我解决了它:

确保您使用的是正确的 Firebase 项目:

firebase use your-project

确保您使用的是“App Engine 默认服务帐户”,例如your-project@appspot.gserviceaccount.com.

通过 gcloud cli 将该角色授予该服务帐户:

gcloud projects add-iam-policy-binding your-project --member serviceAccount:your-project@appspot.gserviceaccount.com --role roles/iam.serviceAccountTokenCreator

部署 Firebase:

firebase deploy

之后它确实对我有用(但不是在没有部署的情况下通过 UI 设置它之后)。

我认为这应该在服务帐户上显示角色:

gcloud iam service-accounts get-iam-policy your-project@appspot.gserviceaccount.com --project your-project

但对我来说仍然给出etag: ACAB,即使我可以在上一个命令的输出中看到角色,并且可以看到该角色现在能够创建自定义令牌。

于 2019-01-08T11:41:14.260 回答
1

按照以下步骤转到控制台访问此链接https://console.cloud.google.com/iam-admin/iam?project=[project-id] :

  1. 单击编辑图标[your-project]@appspot.gserviceaccount.com
  2. 点击添加另一个角色
  3. 在搜索过滤器中输入Service Account Token Creator,然后从结果中选择它
  4. 点击保存确认
于 2020-08-04T00:22:49.750 回答