为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Go Admin SDK 使用 IdToken 在实时数据库上进行身份验证

使用 Go Admin SDK 使用 IdToken 在实时数据库上进行身份验证

Go
LEATH 2022-10-24 15:12:41
在 Go 中使用 Firebase Admin SDK 时,我遇到了无法在实时数据库上进行身份验证的问题。这是我启动数据库连接的方式:option := option.WithTokenSource(tokenSource)app, err := firebase.NewApp(context.Background(), &firebase.Config{    DatabaseURL: "https://databaseName.europe-west1.firebasedatabase.app/",    ProjectID:   "projectId",}, option)client, err := app.Database(context.Background())The是一个返回 atokenSource的习惯。我已经覆盖了该方法以满足我的需求,即:首先从自定义端点获取一个,然后当它过期时,从端点刷新它。TokenSourceReuseTokenSourceToken()IdTokenIdTokensecuretoken.googleapis.com但是使用这种方法,每当我尝试访问我的实时数据库时,我都会收到以下错误:http error status: 401; reason: Unauthorized request.即使数据库的规则完全打开(读/写=真)。使用的令牌也是正确的,因为我可以在 HTTP 请求中使用它,唯一的调整是我必须使用?auth=IDTOKEN而不是?access_token=TOKEN(请参阅此处)TLDR:如何使用 Go Admin SDK 中的 IdToken 向实时数据库验证服务。(只是补充一点,我可以使用相同的方法和令牌对 Firestore 数据库上的服务进行身份验证)。谢谢 !
查看完整描述

1 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

Admin SDK 通过 OAuth2 对后端服务进行身份验证(通过传递Authorization带有 OAuth2 不记名令牌的标头)。因此,您必须使用TokenSource产生 OAuth2 令牌的 a。ID 令牌通常仅用于客户端身份验证。这是我过去使用的一个示例:


// jsonKeyBytes contains the bytes from a service account json file.

conf, err := google.JWTConfigFromJSON(jsonKeyBytes)


ts := conf.TokenSource(ctx)

firebase.NewApp(ctx, nil, option.WithTokenSource(ts))

但是,通常您会使用服务帐户或 Google 应用程序默认凭据直接初始化 Admin SDK,在这种情况下您不必执行任何操作。


查看完整回答
反对 回复 2022-10-24
  • 1 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信