Android: stocker le nom d'utilisateur et le mot de passe?

178

Si je souhaite stocker le nom d'utilisateur et le mot de passe à utiliser dans une application Android, quelle est la meilleure façon de le faire? Est-ce via l'écran des préférences (mais que se passe-t-il si l'utilisateur manque cela?), Ou affiche-t-il une boîte de dialogue et demande à l'utilisateur les informations d'identification? Si tel est le cas, je dois maintenir l'état de l'application. Comment ferais-je cela?

Légende
la source
4
stackoverflow.com/a/786588/1166727 Découvrez ce que @RetoMeier (Tech Lead for Android Development chez Google) a à dire à ce sujet.
tony gil le
1
Si vous recherchez le moyen le plus sûr de stocker les informations d'identification,
lisez
3
@Legend comment avez-vous résolu votre problème?
Erum
@Legend, pouvez-vous nous éclairer sur la sauvegarde de pwd dans les préférences après le chiffrement .. parce que je veux que mon application fonctionne sans Internet, alors comment puis-je obtenir la clé .. (car je ne peux pas stocker la clé sur l'appareil)
eRaisedToX
Vous pouvez utiliser le keystore pour Api +18. developer.android.com/training/articles/keystore
Golnar

Réponses:

115

La plupart des applications Android et iPhone que j'ai vues utilisent un écran ou une boîte de dialogue initial pour demander des informations d'identification. Je pense qu'il est fastidieux pour l'utilisateur de devoir saisir à nouveau son nom / mot de passe souvent, il est donc logique de stocker ces informations du point de vue de la convivialité.

Le conseil du ( guide de développement Android ) est:

En général, nous vous recommandons de minimiser la fréquence des demandes d'informations d'identification des utilisateurs, afin de rendre les attaques de phishing plus visibles et moins susceptibles de réussir. Utilisez plutôt un jeton d'autorisation et actualisez-le.

Dans la mesure du possible, le nom d'utilisateur et le mot de passe ne doivent pas être stockés sur l'appareil. À la place, effectuez une authentification initiale à l'aide du nom d'utilisateur et du mot de passe fournis par l'utilisateur, puis utilisez un jeton d'autorisation de courte durée spécifique au service.

L'utilisation de AccountManger est la meilleure option pour stocker les informations d'identification. Le SampleSyncAdapter fournit un exemple de son utilisation.

Si ce n'est pas une option pour vous pour une raison quelconque, vous pouvez revenir aux informations d'identification persistantes à l'aide du mécanisme Préférences . Les autres applications ne pourront pas accéder à vos préférences, les informations de l'utilisateur ne sont donc pas facilement exposées.

Eric Levine
la source
40
Je dirais qu'il est risqué de conserver les informations de mot de passe comme dans les préférences. Sur les téléphones rootés, il est possible d'accéder au fichier de préférences d'une application. Le moins que vous puissiez faire est de masquer le mot de passe.
Jayesh
51
Si quelqu'un a votre téléphone et est capable de le rooter, vous ne pourrez pas faire grand-chose pour protéger vos données. Ce n'est pas une mauvaise idée de masquer le mot de passe, mais cela n'ajoute pas vraiment beaucoup plus de protection. Ce qui est plus important, c'est que de nombreuses couches de sécurité sont déjà intégrées au système d'exploitation. Bien sûr, vous ne voulez rien faire de stupide pour contourner ces mesures. Il est probablement préférable d'utiliser un système comme OAuth et de stocker un jeton sur l'appareil au lieu du nom d'utilisateur et du mot de passe.
Eric Levine
4
Si vous utilisez le AccountManager(selon ma réponse, et @ Miguel de manière détournée) et que quelqu'un met la main sur votre téléphone GSM, il devra continuer à utiliser votre carte SIM pour avoir accès à vos comptes, car cela invalidera les informations d'identification stockées lorsque la carte SIM change.
Jon O
3
L'effacement des comptes lors du changement de SIP a été supprimé il y a un certain temps, car cela n'a pas de sens, en particulier pour les personnes qui ont plus d'une carte SIM. Une meilleure stratégie en cas de vol de votre téléphone consiste à accéder à la page de votre compte Google et à révoquer l'accès pour l'appareil concerné.
Nikolay Elenkov
2
"L'utilisation de AccountManger est la meilleure option pour stocker les informations d'identification." Pourquoi?
Luc
9

Vous devez utiliser le AccountManager Android . Il est spécialement conçu pour ce scénario. C'est un peu encombrant, mais l'une des choses qu'il fait est d'invalider les informations d'identification locales si la carte SIM change, donc si quelqu'un glisse votre téléphone et y jette une nouvelle carte SIM, vos informations d'identification ne seront pas compromises.

Cela donne également à l'utilisateur un moyen rapide et facile d'accéder (et éventuellement de supprimer) les informations d'identification stockées pour tout compte qu'ils ont sur l'appareil, le tout à partir d'un seul endroit.

SampleSyncAdapter (comme @Miguel mentionné) est un exemple qui utilise les informations d'identification de compte stockées.

Jon O
la source
3
Où est-il documenté que AccountManager "invalidera les informations d'identification locales si la carte SIM change"?
Eric Levine
Ce n'est pas que je sache. Cependant, c'est quelque chose que j'en suis venu à croire / accepter / comprendre après que certains utilisateurs de mon application aient eu des problèmes d'authentification suite aux échanges de cartes SIM.
Jon O
1
Je ne le vois pas dans le code JavaDocs ou AccountManager. Cela semble être une bonne fonctionnalité, ce serait juste bien de le vérifier et de comprendre les détails.
Eric Levine
2
Selon @NikolayElenkov, la fonction d'invalidation du changement de carte SIM a été supprimée.
ThomasW
2
@ThomasW avez-vous une citation pour ça? Ce serait formidable d'obtenir une réponse définitive.
Jon O
8

Je pense que le meilleur moyen de sécuriser vos informations d'identification est de penser d'abord à stocker le mot de passe avec cryptage dans le fichier account.db qui ne pourrait pas être facilement disponible sur les appareils non rootés et en cas d'appareil rooté, le pirate doit avoir besoin de la clé pour déchiffrer il.

Une autre option est de faire toute votre authentification comme le fait Gmail. après la première authentification avec le serveur Gmail. vous avez le jeton d'authentification qui serait utilisé en cas de mot de passe. ce jeton serait stocké en texte brut. Ce jeton pourrait être faux si vous changez le mot de passe du serveur.

la dernière option que je vous recommande d'activer l'authentification à 2 facteurs et de créer un mot de passe spécifique à l'appareil pour votre appareil. Après avoir perdu l'appareil, tout ce dont vous avez besoin est de désactiver cet appareil.

Riz
la source
2
Pouvez-vous publier une source qui dit que accounts.db est crypté? Ou dites-vous que le mot de passe spécifique doit être crypté?
Michał K
1
@Riz, où stocker la clé pour le cryptage alors ... parce que mon application fonctionne sans Internet, donc je ne peux pas l'obtenir à partir du réseau
eRaisedToX
2

Avec le nouveau matériel et API d'empreintes digitales (Android 6.0), vous pouvez le faire comme dans cet exemple d'application github.

Zlatko
la source
8
L'exemple de projet référencé crée une clé dans le magasin de clés Android et l'utilise pour créer un chiffrement pour chiffrer le mot de passe. Le mot de passe et le chiffrement chiffrés sont stockés sous forme de chaînes codées en base64 dans les préférences partagées. Une fois l'authentification par empreinte digitale réussie, la clé secrète est extraite du magasin de clés Android et utilisée avec le chiffrement décodé pour déchiffrer le mot de passe décodé.
mjwheat
@mjwheat c'est tellement utile pour comprendre ce qui se passe dans l'exemple. Merci! Une petite faute de frappe: "... pour déchiffrer le mot de passe encodé."
muetzenflo
2

Ceux-ci sont classés par ordre de difficulté pour casser vos informations cachées .

  1. Stocker en texte clair

  2. Stocker chiffré à l'aide d'une clé symétrique

  3. Utilisation du keystore Android

  4. Stocker chiffré à l'aide de clés asymétriques

source: où est le meilleur endroit pour stocker un mot de passe dans votre application Android

Le fichier de clés lui-même est chiffré à l'aide du code PIN / mot de passe de l'écran de verrouillage de l'utilisateur, par conséquent, lorsque l'écran de l'appareil est verrouillé, le fichier de clés n'est pas disponible. Gardez cela à l'esprit si vous disposez d'un service d'arrière-plan qui pourrait avoir besoin d'accéder aux secrets de votre application.

source: utilisez simplement le magasin de clés Android pour stocker les mots de passe et autres informations sensibles

Dmytro Melnychuk
la source