LoginSignup
21
12

More than 5 years have passed since last update.

GolangでFirebase Service Account Keyを環境変数から読み込む

Last updated at Posted at 2018-10-19

Golang(v1.11)+HerokuのサーバーサイドでFirebase Authenticationのトークン検証を行った際のTips。

サービスアカウントキーをファイルから読みたくない

Firebase Adimin SDKの初期化で詰まった。
公式ドキュメントのサンプルコードは以下。

import (
        "log"

        "golang.org/x/net/context"

        firebase "firebase.google.com/go"
        "firebase.google.com/go/auth"

        "google.golang.org/api/option"
)

opt := option.WithCredentialsFile("path/to/serviceAccountKey.json")
app, err := firebase.NewApp(context.Background(), nil, opt)
if err != nil {
        log.Fatalf("error initializing app: %v\n", err)
}

serviceAccountKey.json ファイルを読み込んで初期化を行っているが、このファイルをgit管理することは避けたい。
一方、Herokuではgit管理していないファイルは置けない。

そこで、keyを環境変数にセットしてそこから読ませたい。

環境変数に設定

こちらの記事を参考に、jsonファイルの中身を環境変数にセットする。
環境変数名は任意。

export $FIREBASE_KEYFILE_JSON="$(< ./serviceAccountKey.json)"

heroku環境に設定するには下のコマンドを実行する。

heroku config:set FIREBASE_KEYFILE_JSON="$(< ./keyfile.json)"

環境変数を読みSDK初期化

ドキュメントから使えそうな関数を探す。

CredentialsFromJSON を使えば良いっぽい。


credentials, err := google.CredentialsFromJSON(ctx, []byte(os.Getenv("FIREBASE_KEYFILE_JSON")))

初期化コード全体としては以下。

credentials, err := google.CredentialsFromJSON(ctx, []byte(os.Getenv("FIREBASE_KEYFILE_JSON")))
if err != nil {
    log.Printf("error credentials from json: %v\n", err)
}
opt := option.WithCredentials(credentials)
app, err := firebase.NewApp(ctx, nil, opt)
if err != nil {
    log.Printf("error initializing app: %v\n", err)
}

トークン検証

初期化さえ済んでしまえば後はドキュメント通りにコードを書けば良い。

client, err := app.Auth(ctx)
if err != nil {
    log.Printf("error getting Auth client: %v\n", err)
}
token, err := client.VerifyIDToken(ctx, idToken)
if err != nil {
    log.Printf("error verifying ID token: %v\n", err)
}
log.Printf("Verified ID token: %v\n", token)
21
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
12