Firebase Authentication、便利ですよね。
ログインや認証の機構を丸投げしてるプロダクトも数多くあると思います。
Firebase AuthenticationのIDトークン(JWT)を認証に使ったAPIの開発等でAPIレスポンスの確認をするにあたって、実際のユーザーのIDトークンがすぐにほしいケースが結構あるのですが、
クライアントSDKなしでIDトークンをパッと取得する方法が思いの外わかりにくかったので備忘録的に残しておきます。
※Admin SDKの認証トークンの話ではなく、ユーザー認証用のIDトークンの話です!
前提
メールアドレス・パスワードでのログインが出来るユーザーをFirebase Authへ登録しておいて下さい。
コマンド
Firebase Authenticationと互換性のあるGCPのプロダクトであるIdentity PlatformにてREST APIが提供されています。 1
こちらに記載があるのですがひっそりとしていてFirebase Authenticationの文脈で探してると見つけるのが結構難しいです。
curl 'https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=[API_KEY]' \
-H 'Content-Type: application/json' \
--data-binary '{"email":"[user@example.com]","password":"[PASSWORD]","returnSecureToken":true}'
[API_KEY]
にはFirebaseのクライアントアプリセットアップ時にダウンロードしたgoogle-services.json
やGoogleService-Info.plist
に含まれるAPI_KEYの項目で置き換えて下さい。
email
とpassword
には言わずもがなFirebase Authへ登録したときに用いたものを入力して下さい。
このcurlコマンドを叩くとレスポンス内にidToken
という項目の入ったjson文字列が返されるので、その文字列がIDトークン(JWT)として使えるのでFirebase Authによる認証付きのAPIへのアクセスもすぐに確認できるはずです。
{
"localId": "ZY1rJK0eYLg...",
"email": "[user@example.com]",
"displayName": "",
"idToken": "[ID_TOKEN]",
"registered": true,
"refreshToken": "[REFRESH_TOKEN]",
"expiresIn": "3600"
}
ちなみにIDトークンの有効期限は1時間なので、期限切れして401が返されるようになってしまったら再度このコマンドを叩いて再取得して下さい。
おわり
出来るだろうなと思いつつしばらく調べてもわからなくてクライアントのアプリを動かしてブレークポイント等を貼ってIDトークンを抜き取ってたりしたのでずいぶん楽になりました。
-
というかこの2つのプロダクトのバックエンドって同一なのでは? ↩