Ich werde oAuth verwenden, um Mails und Kontakte von Google abzurufen. Ich möchte den Benutzer nicht jedes Mal bitten, sich anzumelden, um ein Zugriffstoken und ein Geheimnis zu erhalten. Soweit ich verstanden habe, muss ich sie mit meiner Anwendung entweder in einer Datenbank oder in einer Datenbank speichern SharedPreferences
. Aber ich mache mir ein bisschen Sorgen um Sicherheitsaspekte. Ich habe gelesen, dass Sie die Token verschlüsseln und entschlüsseln können, aber es ist für einen Angreifer einfach, nur Ihre apk und Klassen zu dekompilieren und den Verschlüsselungsschlüssel zu erhalten.
Was ist die beste Methode, um diese Token sicher in Android zu speichern?
123
Antworten:
Speichern Sie sie als gemeinsame Einstellungen . Diese sind standardmäßig privat und andere Apps können nicht darauf zugreifen. Wenn der Benutzer auf gerooteten Geräten explizit den Zugriff auf eine App zulässt, die versucht, sie zu lesen, kann die App sie möglicherweise verwenden, aber Sie können sich nicht davor schützen. Bei der Verschlüsselung muss der Benutzer entweder jedes Mal die Entschlüsselungspassphrase eingeben (wodurch der Zweck des Zwischenspeicherns von Anmeldeinformationen zunichte gemacht wird) oder den Schlüssel in einer Datei speichern, und es tritt das gleiche Problem auf.
Es gibt einige Vorteile beim Speichern von Token anstelle des tatsächlichen Benutzernamen-Passworts:
quelle
Sie können sie im AccountManager speichern . Diesen Jungs zufolge gilt es als Best Practice.
Hier ist die offizielle Definition:
Ausführliche Informationen zur Verwendung von AccountManager:
Am Ende speichert AccountManager Ihr Token jedoch nur als einfachen Text. Daher würde ich vorschlagen, Ihr Geheimnis zu verschlüsseln, bevor Sie es in AccountManager speichern. Sie können verschiedene Verschlüsselungsbibliotheken wie AESCrypt oder AESCrypto verwenden
Eine weitere Option ist die Verwendung der Conceal-Bibliothek . Es ist sicher genug für Facebook und viel einfacher zu bedienen als AccountManager. Hier ist ein Code-Snippet zum Speichern einer geheimen Datei mit Conceal.
quelle
SharedPreferences ist selbst kein sicherer Speicherort. Auf einem gerooteten Gerät können wir die SharedPrefereces-XML-Dateien aller Anwendungen problemlos lesen und ändern. Token sollten daher relativ häufig ablaufen. Aber selbst wenn ein Token jede Stunde abläuft, können neuere Token aus SharedPreferences gestohlen werden. Android KeyStore sollte zum langfristigen Speichern und Abrufen von kryptografischen Schlüsseln verwendet werden, mit denen unsere Token verschlüsselt werden, um sie beispielsweise in SharedPreferences oder einer Datenbank zu speichern. Die Schlüssel werden nicht im Prozess einer Anwendung gespeichert, sodass sie schwerer zu kompromittieren sind.
Relevanter als ein Ort ist also, wie sie selbst sicher sein können, z. B. mithilfe kryptografisch signierter kurzlebiger JWTs, Verschlüsselung mit Android KeyStore und Senden mit einem sicheren Protokoll
quelle
Laden Sie nun das Read the Access Token und Secret in die build.gradle- Datei Ihres App- Moduls . Anschließend müssen Sie die BuildConfig-Variable für Ihr Zugriffstoken und Ihr Geheimnis definieren, damit Sie direkt von Ihrem Code aus darauf zugreifen können. Ihr build.gradle sieht möglicherweise folgendermaßen aus:
Sie können Ihr Zugriffstoken und Ihr Geheimnis in Ihrem Code folgendermaßen verwenden:
Auf diese Weise müssen Sie das Zugriffstoken und das Geheimnis nicht im Klartext in Ihrem Projekt speichern. Selbst wenn jemand Ihre APK dekompiliert, erhält er niemals Ihr Zugriffstoken und Ihr Geheimnis, wenn Sie sie aus einer externen Datei laden.
quelle
Nun, Sie können Ihren Zugriffstoken sichern, indem Sie zwei Optionen folgen.
quelle