【问题标题】:How to authenticate user to Firestore Go SDK?如何向 Firestore Go SDK 验证用户身份?
【发布时间】:2019-12-29 08:19:09
【问题描述】:

我正在尝试使用来自客户端应用程序的Firestore Go SDK。这看起来像一个基于函数的客户端 SDK,但这可能是我的第一个错误?

我正在努力向 Firestore 验证用户身份。我已经使用REST API for Firebase Auth 登录了它们。这会返回一个 ID 令牌、刷新令牌等。如何将其与 Firestore SDK 一起使用?

文档建议我需要致电 firestore.NewClient(<context>, <project-id>, <option>)。对于后一个参数,我尝试 option.WithCredentialsJSON(...) 传递 JWT 解码的 ID 令牌。我也尝试过传递原始刷新令牌。在这两种情况下,SDK 都会抱怨我正在传递的内容。

如何根据我获得的令牌对用户进行身份验证?

【问题讨论】:

    标签: firebase authentication go google-cloud-firestore firebase-authentication


    【解决方案1】:

    适用于 Firestore 的 Go SDK 旨在用于受信任的环境,例如您的开发机器、您控制的服务器或 Cloud Functions。它没有办法让应用程序的用户登录,而是使用管理凭据向服务器进行身份验证,您不希望在不受信任的设备上拥有这些凭据。

    【讨论】:

    • 您能否解释一下这个决定“Go SDK for Firestore 旨在用于受信任的环境”对任何人都有好处,或者它如何实现受信任的OP 上下文中的环境要求?可以在受信任或不受信任的环境中使用 Firestore Go SDK,但通过使用 Go SDK不向用户授权 ID 令牌。但是,通过在同一受信任或不受信任的环境中使用 Firestore REST API,您可以通过在请求的 Authorization 标头中设置 ID 令牌来授权用户。
    • Firebase Admin SDK 的工作方式与客户端 SDK 不同 - 例如,它们绕过 Firestore 和 Cloud Storage 的安全规则,并提供非客户端活动,例如在 Firebase 身份验证中列出和删除用户。 Firebase 不提供适用于 Go 的客户端 SDK,并且 Admin SDK 不太适合不受信任的客户端环境。
    【解决方案2】:

    option.WithCredentialsJSON 不接受 JWT 令牌,而是接受 Google 应用程序默认凭据。

    其他选项是使用环境变量 GOOGLE_APPLICATION_CREDENTIALS 提供带有 Google 应用程序默认凭据的文件路径,因为 firebase sdk 是 cloud.google.com/go sdk 的一部分。

    查看示例(还有其他选项)。

    https://cloud.google.com/docs/authentication/production#auth-cloud-implicit-go

    https://godoc.org/cloud.google.com/go#example-package--ApplicationDefaultCredentials

    【讨论】:

      猜你喜欢
      • 2020-04-07
      • 2021-10-02
      • 2020-08-18
      • 1970-01-01
      • 2022-06-19
      • 2016-03-23
      • 2019-11-22
      • 2020-07-17
      • 1970-01-01
      相关资源
      最近更新 更多