Webシステムを構築する際、普通はパスワードをハッシュ化して保存するので、生パスワードを保存する人はあまりいないと思います。
(流出したら大問題ですね!)
しかしWebサービスのクライアントを開発する際は、パスワードを送信する必要があるので、「パスワードを保存する」機能を実装するには何らかの形で復元できるように保存する必要があります。
もちろん、OAuthなどでトークンを保存するだけにすれば良いのですが、パスワード認証にしか対応していないサービスも多いので、避けて通れません。
AndroidでWebサービスクライアントを開発する場合を想定して、安全なパスワードの保存について考えてみましょう。
データの保存
まずは、単純なデータの保存を考えます。
Androidでアプリが終了してもデータを保存しておくには、SharedPreference、SQLite、独自ファイルなどの方式が考えられます。
今回の題材ではどれを使っても大差ないので、扱いの簡単なSharedPreferenceを採用しましょう。
SharedPreferenceは、以下のような方法で使用できます。
public class Setting { private static final String KEY_PASSWORD = "key_account_password"; public static String loadPassword(Context context) { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); return preferences.getString(KEY_PASSWORD, null); } public static void savePassword(Context context, String password) { SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); editor.putString(KEY_PASSWORD, password); editor.commit(); } }
これで、saveしたパスワードはファイルに保存され、アプリを終了したり端末を再起動しても、同じデータを読み出すことができます。
次回は、この保存方法の詳細と問題点について考えてみましょう。