LoginSignup
7
1

More than 1 year has passed since last update.

Firebaseの認証についてメモ書き

Posted at

Firebaseの認証について色々調べる機会があったので、メモ書きですが残したいと思います。

トークンは2種類

  • FirebaseIDトークン(jwt)
    • 認証に使われる
    • 有効期限は1時間
  • 更新トークン(refreshToken)
    • 新しいFirebaseIDトークンを発行するのに必要
    • 有効期限は無い

ユーザーを無効化や削除した時は更新トークンが無効になる。FirebaseIDトークンを即時無効にすることはできない。
FirebaseIDトークンの有効期限を待てない場合は、無効化したuidのブラックリストを作りセキュリティルールで弾く等の工夫が必要。

フロントで検知する方法

onAuthStateChangedを使うとログイン、ログアウト、トークン更新時に処理を加えることができる

firebase.auth().onAuthStateChanged((user) => {
  if (user) {
    // ログイン中
  } else {
    // 未ログイン
    // ex) ログインページに飛ばす
  }
});

似た関数でonIdTokenChangedがあるが、4.0.0以前ならonAuthStateChangedと同じ動作になり、4.0.0からはログイン、ログアウト時のみ動作するので注意。

firebase-functionsでの認証

onCallを使うとトークンの検証をやってくれる。onRequestはやってくれないので、自前でトークン検証を実装する必要あり。

onCallの検証について

パターン 結果
トークン無し OK
有効なトークン OK
無効なトークン(適当な文字列) NG
期限切れトークン NG

NGの場合はunauthenticatedを返して終了する。
トークン無しの時OKになることに注意。誰でもアクセスされると困る場合はonCallの第二引数のcontextのauthがundefinedなので、undefinedならunauthenticatedを返して終了するようにすればOK。

また、Firebaseエミュレータを使っている場合はトークンの検証はせず常にOKになるので注意。
該当するユーザーがいない場合、context.authは下記が返ってくる。
{ uid: undefined, token: { uid: undefined } }

参考

https://firebase.google.com/docs/auth/admin/manage-sessions?hl=ja
https://firebase.google.com/docs/auth/admin/verify-id-tokens?hl=ja
https://firebase.google.com/docs/reference/js/v8/firebase.auth.Auth#onauthstatechanged

7
1
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
7
1