在 Go 中使用 Firebase Admin SDK 時(shí),我遇到了無法在實(shí)時(shí)數(shù)據(jù)庫上進(jìn)行身份驗(yàn)證的問題。這是我啟動(dòng)數(shù)據(jù)庫連接的方式: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是一個(gè)返回 atokenSource的習(xí)慣。我已經(jīng)覆蓋了該方法以滿足我的需求,即:首先從自定義端點(diǎn)獲取一個(gè),然后當(dāng)它過期時(shí),從端點(diǎn)刷新它。TokenSourceReuseTokenSourceToken()IdTokenIdTokensecuretoken.googleapis.com但是使用這種方法,每當(dāng)我嘗試訪問我的實(shí)時(shí)數(shù)據(jù)庫時(shí),我都會(huì)收到以下錯(cuò)誤:http error status: 401; reason: Unauthorized request.即使數(shù)據(jù)庫的規(guī)則完全打開(讀/寫=真)。使用的令牌也是正確的,因?yàn)槲铱梢栽?HTTP 請(qǐng)求中使用它,唯一的調(diào)整是我必須使用?auth=IDTOKEN而不是?access_token=TOKEN(請(qǐng)參閱此處)TLDR:如何使用 Go Admin SDK 中的 IdToken 向?qū)崟r(shí)數(shù)據(jù)庫驗(yàn)證服務(wù)。(只是補(bǔ)充一點(diǎn),我可以使用相同的方法和令牌對(duì) Firestore 數(shù)據(jù)庫上的服務(wù)進(jìn)行身份驗(yàn)證)。謝謝 !
1 回答

慕雪6442864
TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
Admin SDK 通過 OAuth2 對(duì)后端服務(wù)進(jìn)行身份驗(yàn)證(通過傳遞Authorization帶有 OAuth2 不記名令牌的標(biāo)頭)。因此,您必須使用TokenSource產(chǎn)生 OAuth2 令牌的 a。ID 令牌通常僅用于客戶端身份驗(yàn)證。這是我過去使用的一個(gè)示例:
// 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))
但是,通常您會(huì)使用服務(wù)帳戶或 Google 應(yīng)用程序默認(rèn)憑據(jù)直接初始化 Admin SDK,在這種情況下您不必執(zhí)行任何操作。
- 1 回答
- 0 關(guān)注
- 119 瀏覽
添加回答
舉報(bào)
0/150
提交
取消