有没有办法通过 API/CLI 通过电子邮件启用 Firebase 身份验证?

Roy*_*ron 6 firebase google-cloud-platform terraform firebase-authentication

我们正在过渡到使用 Terraform 在 Google Compute 上创建我们的架构,其中一部分使用 Firebase 作为前端。到目前为止,我已经设法让这一切正常运行,但在 Firebase Auth 上遇到了障碍。本质上,我想以编程方式允许对 Firbase 项目进行“电子邮件/密码”身份验证。

它在控制台中的外观

以上显示了您在 UI 控制台中找到设置的位置,但我希望能够通过 API/CLI 执行此操作,并设置“授权域”。

phl*_*mox 1

是的,截至2022 年 11 月,现在可以使用Terraformgcloud CLI和一些脚本编写。这两种方法都使用REST Identity Toolkit API

\n

如果使用 Terraform:您的配置文件需要指定一个google_identity_platform_project_default_config资源:它的文档可以在此处找到。例如 \xe2\x80\x93 假设您已经声明了一个google_project名为 的资源my_project,您可以google_identity_platform_project_default_config按如下方式添加该资源:

\n
resource "google_identity_platform_project_default_config" "myconfig" {\n\n    project = google_project.myproject.project_id \n\n    sign_in {\n        allow_duplicate_emails = false\n\n        anonymous {\n            enabled = false\n        }\n\n        email {\n            enabled = true\n            password_required = false\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这将启用电子邮件+密码身份验证,禁止匿名访问,并禁止重复的电子邮件地址。

\n

如果使用 gcloud CLI:这会更麻烦。我还没有完全测试它,但它大概相当于 Terraform 在幕后所做的事情。您需要获取服务帐户访问令牌,然后使用 cURL(或类似的工具/API)使用 PATCH 方法(此处的文档)修改 Identity Toolkit 配置,并在“Authorization”标头中提供令牌。

\n

gcloud允许您使用命令获取访问令牌gcloud auth print-access-token,但根据@DazWilkin2021 年博客文章1,使用常规人类凭据获取的令牌无法执行必要的 PATCH 操作;您需要使用由具有正确权限的服务帐户支持的令牌。

\n

博客文章提供了更多详细信息,但大致步骤是:

\n
    \n
  1. 创建一个服务帐户并为其授予正确的权限。(如果您已经拥有适当的服务帐户,则不需要;可以使用 Firebase 控制台或 Terraform 的资源创建此类帐户google_service_account。)

    \n
  2. \n
  3. 创建JSON 服务帐户密钥文件。(如果您已经创建了密钥及其 JSON 文件,则不需要。这些 JSON 文件包含一个带有“project_id”、“private_key_id”和“private_key”键的对象,并且与 gets 的文件类型完全相同如果您转到“项目概述”/“项目设置”/“服务帐户”/“生成新的私钥”,则从 Firebase 控制台生成。它们也可以使用 Terraform 的google_service_account_key资源以编程方式创建。)

    \n
  4. \n
  5. 允许gcloud使用服务帐户的权限执行操作,通过运行gcloudauth activate-service-account”子命令:类似

    \n
     $ gcloud auth activate-service-account --key-file=/path/to/key-file.json EMAIL_ADDRESS_OF_SERVICE_ACCOUNT\n
    Run Code Online (Sandbox Code Playgroud)\n
  6. \n
  7. 通过运行获取服务帐户的访问令牌gcloud auth print-access-token EMAIL_ADDRESS_OF_SERVICE_ACCOUNT

    \n
  8. \n
  9. 使用 cURL 在 HTTP PATCH 请求的标头中提供该令牌。

    \n
  10. \n
\n

有关更多详细信息,请参阅博客文章;它涉及修改 Firebase 项目的“授权域”列表,但启用电子邮件/密码身份验证将非常相似。

\n
\n

1在这个 stackoverflow 答案中也提到了。

\n