在 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,在這種情況下您不必執行任何操作。
- 1 回答
- 0 關注
- 109 瀏覽
添加回答
舉報
0/150
提交
取消