LoginSignup
29
18

More than 5 years have passed since last update.

遂にFirebase Admin SDK Goが登場!

Posted at

長らく待っていたFirebase公式のGo SDKが登場しました。

Introducing Firebase Admin SDK for Go

インストール

次のコマンドでインストールできます。

go get -u firebase.google.com/go

サービスアカウントの鍵の作成

まず認証にはGCPのサービスアカウントを利用します。
https://console.cloud.google.com/iam-admin/serviceaccounts/project?project={projectID}&authuser=0 に アクセスして鍵を作成します。

スクリーンショット 2017-08-31 11.41.41.png

ダウンロードした鍵はservice_account.jsonとして保存しました。

セットアップ

次のコードで鍵ファイルを読み込んでFirebaseのセットアップができます。

import (
    firebase "firebase.google.com/go"
    "google.golang.org/api/option"
)

opt := option.WithCredentialsFile("service_account.json")
app, err := firebase.NewApp(context.Background(), nil, opt)

カスタムトークンの作成

auth#Client.CustomToken を利用してカスタムトークンを作成できます。
カスタムトークンは自前の認証システムでUserを管理するための仕組みです。詳しくはドキュメントを参照してください。

auth, err := app.Auth()
if err != nil {
    panic(err)
}
tok, err := auth.CustomToken("some-id")
if err != nil {
    panic(err)
}
log.Printf("tok = %v", tok)

またauth#Client.CustomTokenWithClaimsを使えばカスタムトークンに任意の値(claims)を含めることができ、この値を使ってRealtimeDatabaseやStorageのセキュリティルールに利用できます。

tok, err = auth.CustomTokenWithClaims("some-id", map[string]interface{}{
    "premium": true, // プランの実装とかに使える
})
if err != nil {
    panic(err)
}
log.Printf("tok = %v", tok)

トークンの検証

auth#Client.VerifyIDToken はトークンの検証に使います。ここで検証するトークンはクライアントSDKのfirebase.User#getIdTokenで発行したトークンの検証になるので、先程作成したカスタムトークンの検証はできません。

// ftok is user.getIdToken() response
ftok := ``
t, err := auth.VerifyIDToken(ftok)
if err != nil {
    panic(err)
}
log.Printf("t = %#v", t)

コード全体

basic.go
package main

import (
    "context"
    "log"

    firebase "firebase.google.com/go"
    "google.golang.org/api/option"
)

func main() {
    opt := option.WithCredentialsFile("../service_account.json")
    app, err := firebase.NewApp(context.Background(), nil, opt)
    if err != nil {
        panic(err)
    }
    auth, err := app.Auth()
    if err != nil {
        panic(err)
    }
    tok, err := auth.CustomToken("some-id")
    if err != nil {
        panic(err)
    }
    log.Printf("tok = %v", tok)

    tok, err = auth.CustomTokenWithClaims("some-id", map[string]interface{}{
        "premium": true,
    })
    if err != nil {
        panic(err)
    }
    log.Printf("tok = %v", tok)

    // ftok is user.getIdToken() response
    ftok := ``
    t, err := auth.VerifyIDToken(ftok)
    if err != nil {
        panic(err)
    }
    log.Printf("t = %#v", t)
}

まとめ

現状できることはカスタムトークンを作成とFirebaseトークンの検証をできるだけですが、これからに期待してスターを付けて温かい目で見守っていきます。 :eyes:

29
18
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
29
18