Firebaseのように、v2からv3.xのSDK(そして現在はv4)に移行したときに、自動認証の期限切れのオプションを削除して常時認証されたモデルを採用することにしました。Firebaseセッションの有効期限
- Firebase 3.x - Token/Session Expiration
- https://groups.google.com/forum/#!topic/firebase-talk/uYMlQny1Jb4
これが提供する便利な機能ですが、これはFirebase-とFirebaseのSDKのためのみオプションであるとして、サイバーセキュリティの観点から、私はいくつかの問題を参照してくださいemail and password authenticationなどのトークンを生成しました(そのうちのいくつかはリンクされたGoogleグループの説明でうまく説明されています)。
終了ページでuser.signOut()
に電話する一般的な提案には、いくつかの穴があります。つまり、クライアントがクラッシュした場合、このコードは決して実行されないため、ストラテジが分断されます。 「ページのロードにサインアウト」の提案も、その中に穴がありますたびにログインする
- 軍のすべてのユーザーをFirebaseとして
- がクライアントに最もすべてをプッシュする(ない目標)ページがロード/リロード、目標Firebaseをアクセスしようとするスクリプトを作成するために誰かを止めるものは何もは、私は、サイバーセキュリティの観点から、より良い仕事をして戦略を探しています
user.signOut()
を持たずに存在しない、それが可能にユーザーが「常に認証された」戦略にオプトインするデフォルトではなく選択します(つまり、 「Remember Me」ボタンを押して)。次のように私が思い付いた
1つの戦略は、次のとおりです。
- ユーザー兆候はそのセッションのために生成されたJWTを取得し、ユーザーが覚えて「を選択しなかった場合
- をFirebaseためにそれを書きますトークンをそのユーザトークンのリストから消去するonDisconnectハンドラを設定してください
- Firebaseのセキュリティルールでは、要求を行ったユーザのJWTがそのユーザのトークンのリストにあることを確認してください
これは、ブラウザがクラッシュしてもonDisconnect
メソッドが実行されるため、より安全です。 の場合、JWTはFirebaseルール変数(only the contents of the token)として使用できません!
これらの問題/欠陥のあるアプローチに照らして、Firebaseによって生成されたトークンをブラウザが閉じるかクラッシュした後(またはあらかじめ決められた時間が経過しても)セッションを無効にするにはどうすればよいですか?
ちょっと@bojeil、提案のおかげで。私は、マルチテナントのシナリオでは、いくつかの重要なケースがあると考えています(ユーザは、「auth_time」を更新することによって、同じアカウントにログインしている他のユーザのセッションを無意識に「拡張」しているかもしれませんが) 。これらの他の機能のタイムラインはどれですか? :) – MandM
"あなたは知らないうちに" auth_timeを更新して同じアカウントにログインしている他のユーザーのセッションを拡張しているかもしれません "ということを意味します。 auth_timeは、再認証またはサインイン時にのみ更新されます。現時点では、これらの機能のための堅実なタイムラインはありません。 – bojeil
私はユーザーAとユーザーBが別のマシンからサインインするという説明を書いていました。基本的にもう一方の 'auth_time 'を更新しましたが、' auth_time'は共有されていないので、それぞれのJWTのありがとう!考慮すべきもう一つの特徴は、別々のサーバーを必要とするのではなく、電子メールとパスワードの認証でカスタムJWTクレーム定義を可能にすることです。 – MandM