Firebase 身份验证客户端线程安全吗?

Is the Firebase auth client thread safe?

我在我的 Go 服务器应用程序中使用 https://github.com/firebase/firebase-admin-go

查看文档后,我每次检查 ID 令牌时都会创建 auth.Client。例如:

client, err := firebaseApp.Auth(ctx)
if err != nil {
    return "", err
}
token, err := client.VerifyIDToken(ctx, idToken)
if err != nil {
    return "", err
}

我已经在 goroutine 之间共享 firebaseApp(一个 firebase.App)。

我的问题:在 goroutine 之间共享 auth.Client 是否安全,或者我是否需要在每次验证 ID 令牌时创建一个?这意味着我将为几乎每个经过身份验证的请求创建一个。这对我来说似乎很昂贵。 我在文档中找不到任何相关信息。

是的,它是 goroutine 安全的。

auth.Client 旨在在 goroutine 之间共享并重用。具体来说,VerifyIDToken() 函数将在调用之间缓存 public 键。您应该重用客户端实例以从中受益。 auth.Client 在需要时在内部执行自己的 locking/synchronization (e.g.)。