有一种方法可以使用从 firebase 应用程序生成的服务帐户文件来生成访问令牌。来源:https://firebase.google.com/docs/database/rest/auth#python。
有没有办法从 Go SDK 生成访问令牌?
[更新] 我已经研究了他们的文档并达到了这个水平,但我对如何从该点获取/获取 access_token 有点迷失了。
package main
import (
"context"
"fmt"
"math"
"regexp"
"sort"
"strconv"
"strings"
"google.golang.org/api/oauth2/v2"
"google.golang.org/api/option"
)
func main() {
ctx := context.Background()
oauth2Service, err := oauth2.NewService(ctx, option.WithCredentialsFile("service-account.json"), option.WithScopes("https://www.googleapis.com/auth/userinfo.email", "https://www.googleapis.com/auth/firebase.database"))
if err != nil {
panic(err.Error())
}
tokenInfo, err := oauth2Service.Tokeninfo().Do()
if err != nil {
panic(err.Error())
}
fmt.Println(tokenInfo)
}
在深入研究他们的文档后刚刚得到了解决方案: 运输包裹的文件
ctx := context.Background()
creds, err := transport.Creds(ctx, option.WithCredentialsFile("service-account.json"), option.WithScopes("https://www.googleapis.com/auth/userinfo.email", "https://www.googleapis.com/auth/firebase.database"))
if err != nil {
panic(err.Error())
}
ts := creds.TokenSource
tok, err := ts.Token()
if err != nil {
panic(err.Error())
}
fmt.Printf("access_token %v", tok.AccessToken)
我使用此代码获得了用于 firebase 消息传递的 google 访问令牌:
func GetFirebaseAuthToken(ctx context.Context, credential string) string {
if len(credential) == 0 {
fmt.Println(componentsError.NewError(businessError.ERROR_FIREBASE_CREDENTIAL_IS_EMPTY).Error())
}
app, err := google.CredentialsFromJSON(ctx, []byte(credential), "https://www.googleapis.com/auth/firebase.messaging")
if err != nil {
fmt.Println(err)
return ""
}
tok, err := app.TokenSource.Token()
if err != nil {
fmt.Println(err)
return ""
}
return tok.AccessToken
}