在 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())
這tokenSource是一個TokenSource回傳 a的習慣ReuseTokenSource。我已經覆寫了該Token()方法以滿足我的需要,即:IdToken首先從自定義端點獲取一個,然后在IdToken過期時從securetoken.googleapis.com端點重繪 它。
但是使用這種方法,每當我嘗試訪問我的實時資料庫時,我都會收到以下錯誤:
http error status: 401; reason: Unauthorized request.
即使資料庫規則完全打開(讀/寫=真)。
正在使用的令牌也是正確的,因為我可以在 HTTP 請求中使用它,唯一的調整是我必須使用?auth=IDTOKEN而不是?access_token=TOKEN(見這里)
TLDR:我如何使用 Go Admin SDK 中的 IdToken 向實時資料庫驗證服務。(只需補充一點,我可以使用相同的方法和令牌對 Firestore 資料庫上的服務進行身份驗證)。
謝謝 !
uj5u.com熱心網友回復:
Admin SDK 通過 OAuth2(通過傳遞Authorization帶有 OAuth2 不記名令牌的標頭)對后端服務進行身份驗證。因此,您必須使用TokenSource生成 OAuth2 令牌的 。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,在這種情況下,您無需執行任何操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/404477.html
標籤:
下一篇:Echo跳過JWT中間件
