Firebase IDトークンについて
2022年04月23日 6:16
こんにちは、ISSUEの寒河江です。
最近は開発にFirebaseを利用することが多いです。認証まわりはGoogleの基盤を使うことでよしなにやってくれているので正直あまり気にしていませんでした。しかしサービスの規模大きくなるにつれセキュリティ面への理解が必要になり、その足掛かりとして今回IDトークン周りについて改めて調べてみました。
今回着目しているIDトークンに関しては2種類のトークンが存在します。わかりづらいので用途を最初に書いておきました!
IDトークン→実際に認証に使われるトークン、ユーザー情報を含んでいる
更新トークン→実際の認証には使われない、IDトークンをリフレッシュするためのトークン
Firebase Authの認証方法に使われるJWTです。他にもID プロバイダ トークンやFirebase カスタムトークンなどがあります。有効期限は1時間で、期限切れになると更新トークンにより新しいIDトークンと交換されます。基本的な使い方としてはAPIのリクエスト認証が多いと思います。HTTPSリクエストを送る際に、リクエストヘッダーのAuthorization
にセットします。
ユーザーに紐づけられたIDトークンを取得するにはgetIdToken
関数を使います。
tokenリフレッシュは更新トークンを利用して、新たなIDトークンを取得します。
そもそも期限も短いのになぜリフレッシュする必要があるのかという疑問もあります。それはFirebase Authで提供されている別の機能で必要になる場合があります。例えばカスタム クレームでは、クレームを更新したとしてもIDトークンをリフレッシュしないと反映されません。カスタムクレーム利用方法と注意点はこちら。
IDトークンをリクエスト共にバックエンドに送ったら、トークンの検証を行います。この処理はミドルウェアで行うイメージです。IDトークンの検証が通ればそのリクエストに沿った処理をします。
認証時にIDトークンと一緒にFirebaseのバックエンドから取得されるトークンで、IDトークンが切れた際に新しいIDトークンの取得を行います。更新トークンは期限切れになることは基本的にありませんが、下記いずれかのケースで失効します。ユーザーデバイスの盗難や紛失、脆弱性を発見した場合などは更新トークンを失効させる必要があります。
バックエンド側で更新トークンを失効させることもできます。更新トークンの失効にRevokeRefreshTokens
を使います。
注意点としては例え更新トークンを失効させていたとしても、IDトークンの有効期限(1時間)内なら認証に通ってしまうことです。これを防ぐにはIDトークンの検証時、更新トークンが失効しているかどうかも確認する必要があります。SDKではIDトークンと更新トークンを同時に検証するメソッドVerifyIDTokenAndCheckRevoked
が用意されています。失効していた場合、クライアントでは再認証を求める処理を実行します。
更新トークンを実装する機会はあまり多くないと思いますが、IDトークンの全容を理解するためにも人通りお伝えしました。以上最後まで読んでいただきありがとうございました。
診断を受けるとあなたの現在の業務委託単価を算出します。今後副業やフリーランスで単価を交渉する際の参考になります。また次の単価レンジに到達するためのヒントも確認できます。
目次を見る