メインコンテンツまでスキップ

ログイン資格情報の管理

このアプリでは、サインアップ時などにログイン資格情報をセキュアストレージに保存します。AndroidではKeyStore、iOSの場合はKeychainを利用します。KeyStoreやKeychainの詳細は、Reference - 認証 - ログイン資格情報の管理を参照してください。

ログイン資格情報の管理を実現するためのライブラリとしてExpoのSecureStoreを利用します。

機能

ログイン資格情報の管理として提供する機能は以下になります。

ログイン資格情報の保存

SecureStore.setItemAsyncを使用して、Key-Value形式で値を設定します。

SecureStoreOptionskeychainAccessibleはデフォルトのWHEN_UNLOCKEDを指定し、ユーザがデバイスのロックを解除している場合のみアクセスできるようにします。

注記

他の端末でセキュアストレージの値をバックアップなどから復元したくない場合は、以下の設定をする必要があります。

保存するログイン資格情報は以下になります。

Key設定値保存タイミング
activeAccountIdログインしたアカウントIDログインに成功した場合
アカウントIDのハッシュ値_password1 2アカウントIDに紐づくパスワードサインアップに成功した場合

ログイン資格情報の取得

SecureStore.getItemAsyncを使用して、Keyを指定して値を取得します。

取得するログイン資格情報は以下になります。

Key取得する値
activeAccountIdログインしたアカウントID
アカウントIDのハッシュ値_passwordアカウントIDに紐づくパスワード

ログイン資格情報の破棄

SecureStore.deleteItemAsyncを使用して、Keyを指定して値を破棄します。

破棄するログイン資格情報は以下になります。

Key破棄する値破棄タイミング
activeAccountIdログインしたアカウントIDログアウト時
アカウントIDのハッシュ値_passwordアカウントIDに紐づくパスワードログアウト時

  1. このアプリではアカウントを複数作成できます。どのアカウントIDのパスワードかを判別するために、プレフィックスにアカウントIDを付与しています。
  2. Androidでは、KeyStoreを使用して暗号化した値をSharedPreferencesに保存します。その際に、Keyは平文でファイルに書き込まれます。ログインに使用するような項目は、平文で保存しない方が良いと考え、パスワードを保存する際のKeyのプレフィックスに使用しているアカウントIDをSHA-256でハッシュ化しています。