al.この広告は、90日以上更新していないブログに表示しています。2018-07-16Firebaseの認証情報を外部に移行するfirebaseFirebaseでプロダクトを作ってたけど、色々キツくなって、やはりAWSに乗せ替えたいという話をよく聞く。Authenticationのデータ移行ができない問題にぶち当たる。いうことかと言うと、パスワードがハッシュ化されてるから、移行後に全員にパスワードリセットさせないといけなくなるということだ。これはよくある勘違いで正しくない。Authenticationのハッシュアルゴリズムやパラメータは知ることができるので、同一アルゴリズム・パラメータでハッシュ計算をしてあげれば、パスワードリセットをさせることなくパスワード認証をすることができる。Authenticationの遺産を捨てていくことができる(いわゆるrehash)。それでは、検証用プロジェクトを作成して試していく。認証情報の取得まず、Firebaseに保存されている認証情報を取得する。auth.json取得された認証情報の中身はこのようになっている。ハッシュ化されたパスワードとsaltが書かれている。上記で取得されたハッシュ値を利用してパスワード認証する。同じハッシュ値が生成できるようになれば良い。必要な情報は全てここに書かれている。Authenticationにおけるscryptは独自に改変したものと書かれている。passwords.ビルド方法のドキュメントに従い、独自改変されたscryptをビルドする。https://github.com/firebase/scrypt/blob/master/BUILDING今回はmacで試すので、新しいopensslをhomebrewで入れておく(macに標準で入っているopensslでは動かない)。opensslビルドする。すると、scryptという名前のバイナリが生成される。makeハッシュパラメータの取得FirebaseのWebコンソール上で見ることができる。パラメータ」を選択すると、ダイアログでパラメータが表示される。取得したハッシュパラメータを利用して、パスワードをハッシュ化する。"$password"`上記のシェルを実行するとハッシュ値が出力される。auth:exportで得たハッシュ値と比較すると、値が一致していることが分かる。Authenticationにはauth:importという機能もある。外部の認証情報(パスワードハッシュ値、アルゴリズム、パラメータ等)を取り込む機能である。取り込んだ後に、パスワード認証が行われたタイミングでrehashされる。逆に言うと、パスワード認証が行われていない間はrehashされない。rehashされていない状態での問題点は、auth:exportをした際に、そのユーザのパスワードハッシュ値が空になることである。外部の認証情報を過去にFirebaseに取り込んだことがあり、それを再度Firebase外に移行させる、といった場合には注意が必要になる。typealiasのスコープはてなブログをはじめよう!aka_mythosilさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。