如何使用 Go 从 Firebase 应用程序创建的服务帐户生成访问令牌

问题描述 投票:0回答:2

有一种方法可以使用从 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)
}
firebase go oauth-2.0 firebase-authentication google-oauth
2个回答
2
投票

在深入研究他们的文档后刚刚得到了解决方案: 运输包裹的文件

    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)

0
投票

我使用此代码获得了用于 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
}
© www.soinside.com 2019 - 2024. All rights reserved.