Androidアプリケーション内で使用するユーザー名とパスワードを保存したい場合、それを行う最善の方法は何ですか?それは設定画面を介して行われますか(しかし、ユーザーがこれを見逃した場合はどうなりますか?)、またはダイアログボックスをポップアップ表示してユーザーに資格情報を要求しますか?その場合、アプリケーションの状態を維持する必要があります。どうすればいいですか?
私が見たほとんどのAndroidおよびiPhoneアプリは、初期画面またはダイアログボックスを使用して資格情報を要求します。ユーザーが頻繁に名前/パスワードを再入力しなければならないのは面倒だと思うので、その情報を保存することは使いやすさの観点から理にかなっています。
( Android開発ガイド )からのアドバイスは次のとおりです。
一般に、フィッシング攻撃をより目立たせ、成功する可能性を低くするために、ユーザーの資格情報を要求する頻度を最小限に抑えることをお勧めします。代わりに、認証トークンを使用して更新します。
可能であれば、ユーザー名とパスワードをデバイスに保存しないでください。代わりに、ユーザーが指定したユーザー名とパスワードを使用して初期認証を実行し、その後、短命のサービス固有の認証トークンを使用します。
AccountManger を使用することが、資格情報を保存するための最適なオプションです。 SampleSyncAdapter は、使用方法の例を提供します。
何らかの理由でこれが選択肢にならない場合は、 Preferences メカニズムを使用して資格情報の永続化にフォールバックできます。他のアプリケーションは設定にアクセスできないため、ユーザーの情報は簡単に公開されません。
資格情報をセキュリティで保護する最善の方法は、最初に、ルート化されていないデバイスでは簡単に利用できないaccount.dbファイルに暗号化されたパスワードを保存することを考えることであり、ルート化されたデバイスの場合、ハッカーは復号化するためのキーを必要とするそれ。
他のオプションは、Gmailが行っている方法のようにすべての認証を行うことです。 Gmailサーバーでの最初の認証後。パスワードの場合に使用される認証トークンを取得しました。そのトークンはプレーンテキストで保存されます。このトークンは、サーバーからパスワードを変更する場合はfalseになる可能性があります。
最後のオプションは、2要素認証を有効にし、デバイスのデバイス固有のパスワードを作成することをお勧めします。デバイスを失った後、必要なのはそのデバイスを無効にすることだけです。
Android AccountManager を使用する必要があります。これは、このシナリオ専用です。少し面倒ですが、SIMカードが変更された場合にローカルの資格情報を無効にすることの1つであるため、誰かがスマートフォンをスワイプして新しいSIMを挿入しても、資格情報が侵害されることはありません。
これにより、ユーザーは、デバイス上にあるアカウントの保存された資格情報に、すべて1か所からすばやく簡単にアクセス(および削除)することができます。
SampleSyncAdapter(前述の@Miguelなど)は、保存されたアカウント資格情報を利用する例です。
SharedPreferencesにパスワードをクリアテキストとして保存することが心配な場合は、 Androidアプリケーションにユーザー設定を保存する最も適切な方法は何ですか をご覧ください。
これらは、難易度の高い順にランク付けされ、隠された情報を破壊します。
平文で保存
対称キーを使用して暗号化されたストア
Androidキーストアの使用
非対称キーを使用して暗号化されたストア
ソース: Androidアプリにパスワードを保存するのに最適な場所はどこですか
キーストア自体は、ユーザー自身のロック画面PIN /パスワードを使用して暗号化されているため、デバイス画面がロックされている場合、キーストアは使用できません。アプリケーションシークレットにアクセスする必要があるバックグラウンドサービスがある場合は、このことに留意してください。
Android開発者によるこの投稿をご覧ください。Androidアプリに保存されているデータのセキュリティを強化するのに役立つ可能性があります。
SDKの SampleSyncAdapter サンプルもご覧ください。あなたを助けるかもしれません。
新しい(Android 6.0)指紋ハードウェアとAPIを使用すると、 this githubサンプルアプリケーションのように実行できます。
http://nelenkov.blogspot.com/2012/05/storing-application-secrets-in-androids.html の情報はかなり実用的ですが、「uses-hidden-Android-apis」ベースのアプローチ。資格情報/パスワードをローカルにデバイスに保存するのを本当に回避できない場合は、検討する必要があります。
https://Gist.github.com/kbsriram/5503519 でそのアイデアのクリーンアップされたGistも作成しました。