Android: Benutzername und Passwort speichern?

177

Wenn ich den Benutzernamen und das Passwort speichern möchte, die in einer Android-Anwendung verwendet werden sollen, wie geht das am besten? Ist es über den Einstellungsbildschirm (aber was ist, wenn der Benutzer dies verpasst?) Oder öffnen Sie ein Dialogfeld und fragen Sie den Benutzer nach den Anmeldeinformationen? Wenn ja, muss ich den Status für die Anwendung beibehalten. Wie würde ich das machen?

Legende
quelle
4
stackoverflow.com/a/786588/1166727 Lesen Sie, was @RetoMeier (Technischer Leiter für Android-Entwicklung bei Google) dazu zu sagen hat.
Tony Gil
1
Wenn Sie nach der sichersten Möglichkeit suchen, die Anmeldeinformationen zu speichern. Lesen Sie
Durai Amuthan.H
3
@Legend, wie du dein Problem gelöst hast?
Erum
@Legend, können Sie etwas Licht auf das Speichern von pwd in Einstellungen nach der Verschlüsselung werfen .. weil ich möchte, dass meine App ohne Internet funktioniert, wie bekomme ich dann den Schlüssel .. (weil ich den Schlüssel nicht auf dem Gerät speichern kann)
eRaisedToX
Sie können den Keystore für Api +18 verwenden. developer.android.com/training/articles/keystore
Golnar

Antworten:

115

Die meisten Android- und iPhone-Apps, die ich gesehen habe, verwenden einen Startbildschirm oder ein Dialogfeld, um nach Anmeldeinformationen zu fragen. Ich denke, es ist umständlich für den Benutzer, seinen Namen / sein Passwort häufig erneut eingeben zu müssen. Daher ist das Speichern dieser Informationen aus Sicht der Benutzerfreundlichkeit sinnvoll.

Der Rat aus dem ( Android Dev Guide ) lautet:

Im Allgemeinen empfehlen wir, die Häufigkeit der Abfrage von Benutzeranmeldeinformationen zu minimieren, um Phishing-Angriffe auffälliger und weniger erfolgreich zu machen. Verwenden Sie stattdessen ein Autorisierungstoken und aktualisieren Sie es.

Benutzername und Passwort sollten nach Möglichkeit nicht auf dem Gerät gespeichert werden. Führen Sie stattdessen eine Erstauthentifizierung mit dem vom Benutzer angegebenen Benutzernamen und Kennwort durch und verwenden Sie dann ein kurzlebiges, dienstspezifisches Autorisierungstoken.

Die Verwendung des AccountManger ist die beste Option zum Speichern von Anmeldeinformationen. Der SampleSyncAdapter bietet ein Beispiel für die Verwendung.

Wenn dies aus irgendeinem Grund für Sie keine Option ist, können Sie mithilfe des Einstellungsmechanismus auf persistente Anmeldeinformationen zurückgreifen . Andere Anwendungen können nicht auf Ihre Einstellungen zugreifen, sodass die Benutzerinformationen nicht leicht verfügbar sind.

Eric Levine
quelle
40
Ich würde sagen, es ist riskant, Passwortinformationen wie in den Einstellungen beizubehalten. Auf gerooteten Telefonen ist es möglich, auf die Voreinstellungsdatei einer App zuzugreifen. Das Mindeste, was Sie tun können, ist, das Passwort zu verschleiern.
Jayesh
50
Wenn jemand Ihr Telefon hat und es rooten kann, können Sie nicht viel tun, um Ihre Daten zu schützen. Es ist keine schlechte Idee, das Passwort zu verschleiern, aber es bietet nicht wirklich viel mehr Schutz. Wichtiger ist, dass bereits viele Sicherheitsebenen in das Betriebssystem integriert sind. Natürlich wollen Sie nichts Dummes tun, um diese Maßnahmen zu umgehen. Es ist wahrscheinlich besser, ein System wie OAuth zu verwenden und anstelle des Benutzernamens und des Kennworts ein Token auf dem Gerät zu speichern.
Eric Levine
4
Wenn Sie das AccountManager(gemäß meiner Antwort und @ Miguel auf Umwegen) verwenden und jemand Ihr GSM-Telefon in die Hand nimmt, muss er weiterhin Ihre SIM-Karte verwenden, um Zugriff auf Ihre Konten zu erhalten, da dadurch gespeicherte Anmeldeinformationen ungültig werden wenn sich die SIM ändert.
Jon O
3
Das Löschen von Konten bei SIP-Änderungen wurde vor einiger Zeit entfernt, da dies insbesondere für Personen mit mehr als einer SIM-Karte wenig sinnvoll ist. Eine bessere Strategie, wenn Ihr Telefon gestohlen wird, besteht darin, auf Ihre Google-Kontoseite zuzugreifen und den Zugriff für das jeweilige Gerät zu widerrufen.
Nikolay Elenkov
2
"Die Verwendung des AccountManger ist die beste Option zum Speichern von Anmeldeinformationen." Warum?
Luc
9

Sie sollten den Android AccountManager verwenden . Es wurde speziell für dieses Szenario entwickelt. Es ist etwas umständlich, aber eines der Dinge, die es tut, ist, die lokalen Anmeldeinformationen ungültig zu machen, wenn sich die SIM-Karte ändert. Wenn also jemand Ihr Telefon klaut und eine neue SIM-Karte hineinwirft, werden Ihre Anmeldeinformationen nicht gefährdet.

Dies gibt dem Benutzer auch eine schnelle und einfache Möglichkeit, von einem Ort aus auf die gespeicherten Anmeldeinformationen für jedes Konto auf dem Gerät zuzugreifen (und diese möglicherweise zu löschen).

SampleSyncAdapter (wie @Miguel erwähnt) ist ein Beispiel, das gespeicherte Kontoanmeldeinformationen verwendet.

Jon O.
quelle
3
Wo ist dokumentiert, dass AccountManager "die lokalen Anmeldeinformationen ungültig macht, wenn sich die SIM-Karte ändert"?
Eric Levine
Es ist nicht so, dass ich es weiß. Es ist jedoch etwas, das ich glaube / akzeptiere / verstehe, nachdem einige Benutzer meiner App nach dem SIM-Austausch Authentifizierungsprobleme hatten.
Jon O
1
Ich sehe es nicht im JavaDocs- oder AccountManager-Code. Es klingt nach einer guten Funktion, es wäre einfach schön, sie zu überprüfen und die Details zu verstehen.
Eric Levine
2
Laut @NikolayElenkov wurde die Funktion zum Ändern der SIM-Karte ungültig gemacht.
ThomasW
2
@ThomasW hast du ein Zitat dafür? Es wäre großartig, eine endgültige Antwort zu erhalten.
Jon O
8

Ich denke, der beste Weg, um Ihre Anmeldeinformationen zu sichern, besteht darin, zuerst das Kennwort mit Verschlüsselung in der Datei account.db zu speichern, die auf nicht gerooteten Geräten nicht leicht verfügbar sein kann. Bei gerooteten Geräten muss der Hacker den Schlüssel zum Entschlüsseln benötigen es.

Eine andere Möglichkeit besteht darin, Ihre gesamte Authentifizierung wie bei Google Mail durchzuführen. nach der ersten Authentifizierung beim Google Mail-Server. Sie haben das Auth-Token erhalten, das im Falle Ihres Passworts verwendet wird. Dieses Token wird im Klartext gespeichert. Dieses Token kann falsch sein, wenn Sie das Kennwort vom Server ändern.

Als letzte Option würde ich Ihnen empfehlen, die 2-Faktor-Authentifizierung zu aktivieren und ein gerätespezifisches Kennwort für Ihr Gerät zu erstellen. Nach dem Verlust des Geräts müssen Sie das Gerät nur noch deaktivieren.

Riz
quelle
2
Können Sie eine Quelle posten, die besagt, dass accounts.db verschlüsselt ist? Oder sagen Sie, dass das spezifische Passwort verschlüsselt werden soll?
Michał K
1
@ Riz, wo man dann den Schlüssel für die Verschlüsselung speichert ... weil meine App ohne Internet funktioniert, kann man ihn also nicht aus dem Netzwerk bekommen
eRaisedToX
2

Mit der neuen Fingerabdruckhardware und API (Android 6.0) können Sie dies wie in dieser Github-Beispielanwendung tun .

Zlatko
quelle
8
Das referenzierte Beispielprojekt erstellt einen Schlüssel im Android Key Store und erstellt daraus eine Verschlüsselung zum Verschlüsseln des Kennworts. Das verschlüsselte Kennwort und die Verschlüsselung werden in den freigegebenen Einstellungen als base64-codierte Zeichenfolgen gespeichert. Nach erfolgreicher Authentifizierung per Fingerabdruck wird der geheime Schlüssel aus dem Android Key Store abgerufen und mit der decodierten Verschlüsselung zum Entschlüsseln des decodierten Passworts verwendet.
mjwheat
@mjwheat Das ist so hilfreich, um zu verstehen, was im Beispiel vor sich geht. Vielen Dank! Ein kleiner Tippfehler: "... um das verschlüsselte Passwort zu entschlüsseln."
Muetzenflo
2

Diese sind nach Schwierigkeitsgrad geordnet, um Ihre versteckten Informationen zu zerstören .

  1. Im Klartext speichern

  2. Mit einem symmetrischen Schlüssel verschlüsselt speichern

  3. Verwenden des Android Keystore

  4. Mit asymmetrischen Schlüsseln verschlüsselt speichern

Quelle: Wo kann man ein Passwort am besten in der Android-App speichern?

Der Keystore selbst wird mit der PIN / dem Kennwort des Benutzers für den Sperrbildschirm verschlüsselt. Wenn der Bildschirm des Geräts gesperrt ist, ist der Keystore daher nicht verfügbar. Denken Sie daran, wenn Sie über einen Hintergrunddienst verfügen, der möglicherweise auf Ihre Anwendungsgeheimnisse zugreifen muss.

Quelle: Verwenden Sie einfach den Android Keystore, um Passwörter und andere vertrauliche Informationen zu speichern

Dmytro Melnychuk
quelle
1

Die Informationen unter http://nelenkov.blogspot.com/2012/05/storing-application-secrets-in-androids.html sind ein ziemlich pragmatischer, aber auf "Verwendete-versteckte-Android-Apis" basierender Ansatz. Es ist etwas zu beachten, wenn Sie wirklich nicht darum herumkommen können, Anmeldeinformationen / Passwörter lokal auf dem Gerät zu speichern.

Ich habe auch unter https://gist.github.com/kbsriram/5503519 einen bereinigten Kern dieser Idee erstellt , der hilfreich sein könnte.

kbs
quelle