35
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Firebase Authenticationのユーザー認証用のIDトークンをコマンド一発で取ってくる方法

Last updated at Posted at 2021-02-26

Firebase Authentication、便利ですよね。
ログインや認証の機構を丸投げしてるプロダクトも数多くあると思います。

Firebase AuthenticationのIDトークン(JWT)を認証に使ったAPIの開発等でAPIレスポンスの確認をするにあたって、実際のユーザーのIDトークンがすぐにほしいケースが結構あるのですが、
クライアントSDKなしでIDトークンをパッと取得する方法が思いの外わかりにくかったので備忘録的に残しておきます。

※Admin SDKの認証トークンの話ではなく、ユーザー認証用のIDトークンの話です!

前提

メールアドレス・パスワードでのログインが出来るユーザーをFirebase Authへ登録しておいて下さい。

スクリーンショット 2021-02-26 17.17.45.png

コマンド

Firebase Authenticationと互換性のあるGCPのプロダクトであるIdentity PlatformにてREST APIが提供されています。 1
こちらに記載があるのですがひっそりとしていてFirebase Authenticationの文脈で探してると見つけるのが結構難しいです。

Request
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.jsonGoogleService-Info.plistに含まれるAPI_KEYの項目で置き換えて下さい。
emailpasswordには言わずもがなFirebase Authへ登録したときに用いたものを入力して下さい。

このcurlコマンドを叩くとレスポンス内にidTokenという項目の入ったjson文字列が返されるので、その文字列がIDトークン(JWT)として使えるのでFirebase Authによる認証付きのAPIへのアクセスもすぐに確認できるはずです。

Response
{
  "localId": "ZY1rJK0eYLg...",
  "email": "[user@example.com]",
  "displayName": "",
  "idToken": "[ID_TOKEN]",
  "registered": true,
  "refreshToken": "[REFRESH_TOKEN]",
  "expiresIn": "3600"
}

ちなみにIDトークンの有効期限は1時間なので、期限切れして401が返されるようになってしまったら再度このコマンドを叩いて再取得して下さい。

おわり

出来るだろうなと思いつつしばらく調べてもわからなくてクライアントのアプリを動かしてブレークポイント等を貼ってIDトークンを抜き取ってたりしたのでずいぶん楽になりました。

  1. というかこの2つのプロダクトのバックエンドって同一なのでは?

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?