post Image
遂にFirebase Admin SDK Goが登場!

長らく待っていた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)

コード全体

https://github.com/k2wanko/tasting-firebase-go/blob/ae9a032/basic/basic.go

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:

https://github.com/firebase/firebase-admin-go


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。