使用 Go Admin SDK 使用 IdToken 在实时数据库上进行身份验证
Authenticate on Realtime Database using an IdToken using the Go Admin SDK
在 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
那 return 一个 ReuseTokenSource
。我重写了 Token()
方法以满足我的需要,即:首先从自定义端点获取 IdToken
,然后当 IdToken
过期时,从 securetoken.googleapis.com
端点。
但是使用这种方法,每当我尝试访问我的实时数据库时,我都会收到以下错误:
http error status: 401; reason: Unauthorized request.
即使数据库的规则完全打开 (read/write=true)。
使用的令牌也是正确的,因为我可以在 HTTP 请求中使用它,唯一的调整是我必须使用 ?auth=IDTOKEN
而不是 ?access_token=TOKEN
(参见 here )
TLDR:如何使用 Go Admin SDK 中的 IdToken 来验证实时数据库的服务。 (只是补充一点,我可以使用相同的方法和令牌对 Firestore 数据库上的服务进行身份验证)。
谢谢!
Admin SDK 通过 OAuth2 对后端服务进行身份验证(通过传递带有 OAuth2 不记名令牌的 Authorization
header)。因此,您必须使用生成 OAuth2 令牌的 TokenSource
。 ID 令牌通常仅用于 client-side 身份验证。这是我过去使用过的示例:
// 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,在这种情况下您不必执行任何操作。
在 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
那 return 一个 ReuseTokenSource
。我重写了 Token()
方法以满足我的需要,即:首先从自定义端点获取 IdToken
,然后当 IdToken
过期时,从 securetoken.googleapis.com
端点。
但是使用这种方法,每当我尝试访问我的实时数据库时,我都会收到以下错误:
http error status: 401; reason: Unauthorized request.
即使数据库的规则完全打开 (read/write=true)。
使用的令牌也是正确的,因为我可以在 HTTP 请求中使用它,唯一的调整是我必须使用 ?auth=IDTOKEN
而不是 ?access_token=TOKEN
(参见 here )
TLDR:如何使用 Go Admin SDK 中的 IdToken 来验证实时数据库的服务。 (只是补充一点,我可以使用相同的方法和令牌对 Firestore 数据库上的服务进行身份验证)。
谢谢!
Admin SDK 通过 OAuth2 对后端服务进行身份验证(通过传递带有 OAuth2 不记名令牌的 Authorization
header)。因此,您必须使用生成 OAuth2 令牌的 TokenSource
。 ID 令牌通常仅用于 client-side 身份验证。这是我过去使用过的示例:
// 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,在这种情况下您不必执行任何操作。