firebase - 将 Google Firebase Golang 库(例如 IAP 和 Firestore)用于非管理员客户端应用程序
问题描述
简要描述;简介
大家好,
我正在与 Golang 合作,开发一种可以在家中本地运行的软件,但也可以与一些云数据同步(每个用户登录单独保护)。为此,我决定使用 Google Cloud Service - Firebase(IAP、Hosting、Functions 和 Firestore)。让我告诉你,我喜欢开发和学习这些。
然而,问题来了:我对谷歌提供的用于他们服务的 Golang 工具(库)感到非常困惑。如果您的代码在受信任的机器上运行,他们似乎有定义明确的 Golang 库来使用他们的服务,因为您必须将凭据导出到它。
就我而言,我正在开发的软件将在客户端计算机上运行,因此我需要客户端登录到 IAP 等。有人可以帮我吗?
问题
- 没有可用的工具似乎是特定于 Golang 客户端(非管理员)
- Google 提供了许多存储库,以及指向似乎做类似事情的不同工具的链接,其中一个供管理员使用,哪个使用他们的 RPC 服务器,哪个可以用于我的客户端?
- cloud.google.com/go/
- firebase.google.com/go
- https://github.com/googleapis/google-cloud-go
- google.golang.org/api/(已弃用,但仍在其文档中引用)
- 谷歌对相同事物的不同版本有非常相似的名称;
- 文档对我来说似乎不够清楚,如果他们有特定的库或没有适合我的情况。
我取得的成就
- 使用 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)
}
}
最后的问题
从私有 Firebase 项目的非管理员客户帐户的角度来看:
- 谁能解释/澄清这些库?
- 我将 oauth2 与 IAP 令牌(通过 REST API 获得)一起使用,这个包从现在开始可以正常工作吗?
- 我可以使用 oauth2 包来做更多的 IAP 服务吗?比如,更新令牌,登录?
感谢您的想法和建议,在此先感谢您!
解决方案
推荐阅读
- java - 如何通过属性设置 Spring Cloud Stream Kafka 的偏移提交间隔
- node.js - mongodb 突然停止在生产服务器上工作
- github-pages - 使用子模块时如何创建 Github 页面站点
- node.js - AWS 负载均衡器 502 错误网关
- amazon-web-services - 在 API 网关中调用方法之前如何执行 Lambda 函数?
- angular - 尝试在 Angular 12 中显示来自 Postman 的 API
- jena - Jena 多行字符串输出
- javascript - 使用 React 将数据导出到 excel 时如何将数字或 JSON 转换为字符串?
- angular - Kendo-datetime 在角度上抛出错误
- laravel - Laravel Spatie 媒体库双磁盘名