Android:ユーザー名とパスワードを保存していますか?


178

Androidアプリケーション内で使用するユーザー名とパスワードを保存したい場合、それを行うための最良の方法は何ですか?それは設定画面からですか(ただし、ユーザーがこれを見逃した場合はどうなりますか)、またはダイアログボックスをポップアップしてユーザーに資格情報を要求しますか?もしそうなら、私はアプリケーションの状態を維持する必要があります。どうすればいいですか?


4
stackoverflow.com/a/786588/1166727 @RetoMeier(GoogleのAndroid開発の技術リーダー)がこれについて何を言っているかを確認してください。
トニーギル

1
あなたはcredentials.Readこの回答格納する最も安全な方法を探している場合stackoverflow.com/a/20560574/730807
Durai Amuthan.H

3
@伝説はあなたがあなたの問題をどのように解決したか?
Erum

@レジェンド、暗号化後の設定でパスワードを保存することに少し光を当てることができます..インターネットなしでアプリを動作させたいので、キーを取得するにはどうすればよいですか(coz私はデバイスにキーを保存できません)
eRaisedToX

Api +18のキーストアを使用できます。developer.android.com/training/articles/keystore
ゴルナー

回答:


115

私が見たほとんどのAndroidおよびiPhoneアプリは、初期画面またはダイアログボックスを使用して認証情報を要求します。ユーザーが頻繁に名前/パスワードを再入力しなければならないのは面倒なので、その情報を保存することは、ユーザビリティの観点から理にかなっています。

Android開発ガイド)からのアドバイスは次のとおりです。

一般に、ユーザーの資格情報を要求する頻度を最小限に抑えることをお勧めします。これにより、フィッシング攻撃がより目立ち、成功する可能性が低くなります。代わりに、認証トークンを使用して更新します。

可能であれば、ユーザー名とパスワードをデバイスに保存しないでください。代わりに、ユーザーから提供されたユーザー名とパスワードを使用して初期認証を実行し、その後、有効期間が短いサービス固有の承認トークンを使用します。

資格情報を保存するには、AccountMangerの使用が最適です。SampleSyncAdapterは、それを使用する方法の例を提供します。

何らかの理由でこれが選択肢にない場合は、設定メカニズムを使用して資格情報の永続化にフォールバックできます。他のアプリケーションは設定にアクセスできないため、ユーザーの情報は簡単には公開されません。


40
設定でパスワード情報をそのまま保持するのは危険だと思います。根ざした電話では、アプリの設定ファイルにアクセスすることが可能です。少なくともできることは、パスワードを難読化することです。
Jayesh、2009

51
誰かがあなたの電話を持っていて、それを根付かせることができるならば、あなたのデータを安全に保つためにあなたがすることができるであろうことはたくさんありません。パスワードを難読化することは悪い考えではありませんが、実際にはそれほど多くの保護を追加しているわけではありません。さらに重要なことは、OSにすでに組み込まれているセキュリティの多くの層があることです。もちろん、これらの対策を回避するために愚かなことをしたくはありません。OAuthなどのシステムを使用して、ユーザー名とパスワードの代わりにトークンをデバイスに保存する方がおそらく良いでしょう。
Eric Levine

4
あなたが使用している場合AccountManager(遠回しに私の答えどおり、とミゲルの@を)し、誰かがあなたのGSM携帯電話のホールドを取得し、それが保存されている資格情報が無効になりますように、彼らは、あなたのアカウントへのアクセス権を持っているあなたのSIMを使用して維持する必要がありますSIMが変更されたとき。
Jon O

3
特に複数のSIMを持っている人にとっては意味がないため、SIPの変更によるアカウントのワイプはかなり前に削除されました。スマートフォンが盗まれた場合のより良い戦略は、Googleアカウントページにアクセスして、特定のデバイスへのアクセスを取り消すことです。
Nikolay Elenkov 2013年

2
「AccountMangerの使用は、資格情報を保存するための最良のオプションです。」 どうして?
Luc

9

Android AccountManagerを使用する必要があります。このシナリオ用に作成されています。少し面倒ですが、SIMカードが変更されるとローカル認証情報が無効になるため、誰かが携帯電話をスワイプして新しいSIMを入れても、認証情報が侵害されることはありません。

これにより、ユーザーはデバイスにあるアカウントの保存された資格情報に、すべて1か所からすばやく簡単にアクセス(および削除)することができます。

SampleSyncAdapter(前述の@Miguelと同様)は、保存されたアカウント資格情報を利用する例です。


3
AccountManagerが「SIMカードが変更された場合、ローカルの資格情報を無効にする」ことはどこに文書化されていますか?
エリック・レヴィン

私が気づいていることではありません。ただし、これは、アプリの一部のユーザーがSIMの交換後に認証の問題を抱えていた後に私が信じる/受け入れる/理解するようになったものです。
Jon O

1
JavaDocsやAccountManagerのコードには表示されません。それは良い機能のように聞こえますが、それを確認して詳細を理解するだけでいいでしょう。
エリック・レヴィン

2
@NikolayElenkovによると、SIMカードの無効化機能は削除されています。
ThomasW 2014

2
@ThomasWそのための引用はありますか?ある種の決定的な答えを得ることは素晴らしいことです。
Jon O

8

私はあなたの資格情報を保護するための最良の方法は、ルート化されていないデバイスでは簡単に利用できなかった暗号化されたパスワードをaccount.dbファイルに格納することを最初に考えることであると思いますそれ。

他のオプションは、Gmailのようにすべての認証を行うことです。Gmailサーバーでの最初の認証の後。パスワードの場合に使用される認証トークンを取得しました。このトークンはプレーンテキストで格納されます。サーバーからパスワードを変更した場合、このトークンはfalseになる可能性があります。

最後のオプションとして、2要素認証を有効にし、デバイスにデバイス固有のパスワードを作成することをお勧めします。デバイスを紛失した後は、そのデバイスを無効にするだけです。


2
accounts.dbは暗号化されているというソースを投稿できますか?または、特定のパスワードを暗号化する必要があると言いますか?
のMichałK

1
@Riz、暗号化用のキーを保存する場所...私のアプリはインターネットなしで動作するため、ネットワークから取得できません
eRaisedToX 2017




2

新しい(Android 6.0)指紋ハードウェアとAPIを使用すると、この githubサンプルアプリケーションと同じように実行できます。


8
参照されているサンプルプロジェクトは、Androidキーストアにキーを作成し、それを使用してパスワードを暗号化するための暗号を作成します。暗号化されたパスワードと暗号は、共有設定にbase64エンコードされた文字列として保存されます。指紋認証が成功すると、秘密鍵がAndroidキーストアから取得され、解読された暗号と一緒に使用されて、解読されたパスワードが解読されます。
mjwheat

@mjwheatこれは、例で何が起こっているかを理解するのに非常に役立ちます。ありがとう!ちょっとしたタイプミス:「...暗号化されたパスワードを復号化する」
muetzenflo

2

これらはあなたの隠された情報を壊すために難易度の順にランク付けされています

  1. クリアテキストで保存

  2. 対称鍵を使用して暗号化されたストア

  3. Androidキーストアの使用

  4. 非対称キーを使用して暗号化されたストア

出典:Androidアプリでパスワードを保存するのに最適な場所はどこですか

キーストア自体は、ユーザー自身のロック画面のピン/パスワードを使用して暗号化されるため、デバイス画面がロックされている場合、キーストアは使用できません。アプリケーションのシークレットにアクセスする必要のあるバックグラウンドサービスがある場合は、このことを覚えておいてください。

出典:Androidキーストアを使用してパスワードやその他の機密情報を保存する


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.