将 Google Firebase Golang 库(例如 IAP 和 Firestore)用于非管理客户端应用程序

Vin*_*gui 5 go oauth-2.0 firebase firebase-authentication google-cloud-firestore

简要描述;简介

大家好,

我正在与 Golang 合作,开发一款可以在家里本地运行的软件,但也可以与一些云数据同步(每个用户登录单独保护)。为此,我决定使用 Google Cloud Service - Firebase(IAP、托管、Functions 和 Firestore)。让我告诉你,我喜欢开发和学习这些。

然而,问题来了:我对 Google 提供的用于其服务的 Golang 工具(库)感到非常困惑。他们似乎拥有定义明确的 Golang 库来配合他们的服务IF因为您必须向其导出凭据。

就我而言,我正在开发的软件将在客户端计算机上运行,​​因此我需要客户端登录 IAP 等。任何人都可以帮助我吗?

问题

  1. 似乎没有一个可用的工具专门针对 Golang 客户端(非管理员)
  2. Google 提供了很多很多存储库,以及指向似乎执行类似操作的不同工具的链接,其中哪一个供管理员使用,哪一个使用他们的 RPC 服务器,哪一个可以用于我的客户端?
  3. 谷歌对同一事物的不同版本有非常相似的名称;
  4. 文档对我来说似乎不够清楚,以及他们是否有特定的库或不适合我的情况。

我取得了什么成就

  • 使用 REST API,我设法通过一个用户帐户(在我的 IAP 项目中创建)获取 tokenID(登录);
  • 凭借其 tokenID,我设法使用 REST API 检索他有权访问的一些文档;
  • 通过以下代码,我设法使用 Golang 库之一(应该用于管理员凭据)来使用我的项目的私有 IAP 用户帐户检索相同的文档。
    package main

    import (
        "context"
        "fmt"

        "cloud.google.com/go/firestore"
        "golang.org/x/oauth2"
        "google.golang.org/api/option"
    )

    func main() {
        ctx := context.Background()
        token := oauth2.Token{
            AccessToken:  "TOKEN_ID-FROM-IAP",
            TokenType:    "Bearer",
            RefreshToken: "REFRESH_TOKEN-from-IAP",
        }

        oauthClient := &oauth2.Config{}
        tSource := oauthClient.TokenSource(ctx, &token)

        client, err := firestore.NewClient(ctx, "ProjectID", option.WithTokenSource(tSource))
        if err != nil {
            // TODO: Handle error.
        }
        defer client.Close()

        iter := client.Doc("docPath").Snapshots(ctx)

        defer iter.Stop()
        for {
            docsnap, err := iter.Next()
            if err != nil {
                // TODO: Handle error.
            }

            dataMap := docsnap.Data()
            fmt.Println(dataMap)
        }
    }
Run Code Online (Sandbox Code Playgroud)

最后的问题

从私有 Firebase 项目的非管理员客户端帐户的角度来看:

  • 谁能解释/澄清这些库?
  • 我将 oauth2 与 IAP 令牌(通过 REST API 获取)一起使用,从现在起这个包可以正常工作吗?
  • 我可以使用 oauth2 包来执行更多 IAP 服务吗?比如,更新令牌,登录?

我感谢您的想法和建议,提前谢谢您!