【问题标题】:Identity Toolkit API config returns "CONFIGURATION_NOT_FOUND"Identity Toolkit API 配置返回 \"CONFIGURATION_NOT_FOUND\"
【发布时间】:2022-08-22 12:32:31
【问题描述】:

我正在尝试在我的项目中启用Firebase Authentication,并通过API(不使用GUI控制台)将Phone Auth添加到其中。

我正在使用Service Usage API 来启用Identity Toolkit,然后尝试使用Identity Toolkit API 来添加Phone Auth

我通过Service Usage API 启用Identity Toolkit,如下所示(POST 请求):

网址

https://serviceusage.googleapis.com/v1/projects/MY_GCP_PROJ/services:batchEnable

身体

{
  \"serviceIds\": [\"identitytoolkit\"]
}

事实上,在运行此请求后,我在 GCP 控制台中看到 Identity Toolkit 已启用。

之后,我尝试使用Identity Toolkit API 更新配置,如下所示(PATCH 请求):

网址

https://identitytoolkit.googleapis.com/v2/projects/MY_GCP_PROJ/config?updateMask=signIn

身体

{
    \"signIn\": {
        \"phoneNumber\": {
            \"enabled\": true,
            \"testPhoneNumbers\": {
                \"+11111111111\": \"123456\",
            }
        },
    }
}

但由于某种原因,我收到一条错误消息:

{
    \"error\": {
        \"code\": 404,
        \"message\": \"CONFIGURATION_NOT_FOUND\",
        \"status\": \"NOT_FOUND\"
    }
}

我不明白为什么Identity Toolkit API 找不到配置并按指定更新它。

有谁知道如何解决?

谢谢

更新 - 管道响应

更新 2 - 服务帐户权限

App 引擎管理员

App Engine 柔性环境服务代理

云数据存储索引管理员

云数据存储用户

云部署管理员

云部署服务代理

云功能服务代理

Firebase 管理员的云存储

Firebase 服务代理的云存储

Firebase 管理员

Firebase Admin SDK 管理员服务代理

Firebase 身份验证管理员

Firebase 身份验证查看器

Firebase 云消息传递 API 管理员

Firebase 开发管理员

Firebase 扩展 API 服务代理

Firebase 远程配置管理员

Firebase 规则管理员

Firebase SDK 配置服务代理

Firebase 服务管理服务代理

Firestore 服务代理

谷歌批处理服务代理

身份平台管理员

身份平台查看器

身份工具包管理员

身份工具包查看器

组织管理员

所有者

存储对象管理员

  • 根据经验,它有点粗糙。您是否尝试过GET\'ting /config 来确认您的掩码与结构匹配?您使用什么身份来验证请求?
  • @DazWilkin 是的,我确实尝试过GET,但不幸的是我得到了同样的错误。我使用不记名令牌来验证请求。当我通过 GCP 控制台手动启用身份提供程序时,请求突然开始工作。但它仍然不是我的解决方案,因为我想自动化这个过程并通过 REST API 启用它。知道为什么会这样吗?
  • 哪个身份?您的用户帐户 (you@gmail.com)?那是行不通的。您将需要创建一个服务帐户。我blogged 讲述了我在这方面的经验(为 Firebase Auth 添加授权域)。我下午要去|晚上,但明天会检查一下,看看你过得怎么样。
  • @DazWilkin 谢谢。我已经重新尝试使用 GCP 的服务帐户令牌,但不幸的是我仍然收到 CONFIGURATION_NOT_FOUND 错误。你找到解决方法了吗?
  • 它对我有用(更新authorizedDomains)。你能得到GET /config吗?如果 auth\'s 工作,我怀疑你的 updateMask 或正文不正确

标签: firebase google-cloud-platform firebase-authentication google-api google-identity-toolkit


【解决方案1】:

好的,以下对我有用。

根据讨论,您必须在 Firebase 项目中启用 identitytoolkit

SERVICE="identitytoolkit"
gcloud services enable ${SERVICE}.googleapis.com \
--project=${PROJECT}

# verify:

gcloud services list \
--enabled \
--project=${PROJECT} \
--filter=config.name=${SERVICE}.googleapis.com \
--format="value(state)"
# Want: ENABLED

然后:

PROJECT="[YOUR-FIREBASE-AUTH-PROJECT]"
ACCOUNT="[YOUR-SERVICE-ACCOUNT]"
EMAIL="${ACCOUNT}@${PROJECT}.iam.gserviceaccount.com"

# Optional: Create Service Account in Firebase Auth project
gcloud iam service-accounts create ${ACCOUNT} \
--project=${PROJECT}

# Create a Key for it to use to authenticate gcloud
gcloud iam service-accounts keys create ${PWD}/${ACCOUNT}.json \
--iam-account=${EMAIL} \
--project=${PROJECT}

# Add Firebase Auth Admin role
gcloud projects add-iam-policy-binding ${PROJECT} \
--role="roles/firebaseauth.admin" \
--member=serviceAccount:${EMAIL}

# Authenticate `gcloud` with Service Account (key)
gcloud auth activate-service-account --key-file=${PWD}/${ACCOUNT}.json

# Obtain Access Token for Service Account
TOKEN=$(gcloud auth print-access-token ${EMAIL})

DATA='
{
  "signIn":{
    "phoneNumber":{
      "enabled":true,
      "testPhoneNumbers":{
        "+11111111111":"123456"
      }
    }
  }
}
'

curl \
--silent \
--request PATCH \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "${DATA}" \
https://identitytoolkit.googleapis.com/v2/projects/${PROJECT}/config?updateMask=signIn

然后:

curl \
--silent \
--request GET \
--header "Authorization: Bearer ${TOKEN}" \
--header "Accept: application/json" \
https://identitytoolkit.googleapis.com/v2/projects/${PROJECT}/config \
| jq -r .signIn.phoneNumber
{
  "enabled": true,
  "testPhoneNumbers": {
    "+11111111111": "123456"
  }
}

【讨论】:

  • 嗨,我在运行最后两个命令时仍然收到 CONFIGURATION_NOT_FOUND 错误。当您使用firebase projects:create 创建项目时,它对您有用吗?
  • 这是否与我使用的服务帐户有权访问我组织的所有 GCP 项目这一事实有关?该服务帐号不是此特定项目的服务帐号,而是有权更新此项目的外部服务帐号
  • 服务帐号必须是 Firebase 项目 (!) 政策的一部分。哪个项目拥有服务帐户并不重要,但它必须存在于 Firebase 项目的政策中。我授予服务帐户角色roles/firebaseauth.admin,但这可能太强大了。
  • 某种形式的东西:gcloud projects add-iam-policy-binding ${PROJECT} --member=serviceAccount:${EMAIL} --role=roles/firebaseauth.admin
  • 我已将此角色添加到服务帐户。仍然收到CONFIGURATION_NOT_FOUND 错误
【解决方案2】:

当我尝试使用 REST API 时,同样的问题发生在我身上,但后来我知道我使用的 URL 是错误的。 试试Method: projects.updateConfig

【讨论】:

    猜你喜欢
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 2015-10-29
    • 1970-01-01
    • 2021-09-17
    • 2015-11-01
    • 1970-01-01
    相关资源
    最近更新 更多