Restaurer les identifiants d'application lors de la configuration d'un nouvel appareil

La fonctionnalité Restaurer les identifiants du Credential Manager permet aux utilisateurs de restaurer leurs comptes d'application lorsqu'ils configurent un nouvel appareil. Cette API est en version Preview pour les développeurs et disponible sur tous les appareils équipés d'Android 9 ou version ultérieure et des services Google Play (GMS) Core version 242200000 ou ultérieure. Voici quelques avantages de la fonctionnalité Restaurer les identifiants :

  • Expérience utilisateur fluide : les utilisateurs peuvent restaurer leur compte d'application sans avoir à se connecter manuellement à chaque application.
  • Engagement utilisateur accru : les utilisateurs sont plus susceptibles de continuer à utiliser votre application s'ils peuvent restaurer leur compte lors de la configuration d'un nouvel appareil.
  • Effort de développement réduit : la fonctionnalité de restauration des identifiants est intégrée au Gestionnaire d'identifiants. Les développeurs qui prennent déjà en charge les clés d'accès peuvent donc ajouter des fonctionnalités de restauration des identifiants.

Fonctionnement

Vous pouvez utiliser RestoreCredentials pour créer, obtenir et effacer les identifiants concernés.

  1. Créez les identifiants de restauration : lorsque l'utilisateur se connecte à votre application, créez des identifiants de restauration associés à son compte. Cet identifiant est stocké localement et synchronisé avec le cloud si l'utilisateur a activé la sauvegarde Google et que le chiffrement de bout en bout est disponible (les applications peuvent désactiver la synchronisation avec le cloud).
  2. Obtenir l'identifiant de restauration : lorsque l'utilisateur configure un nouvel appareil, votre application peut demander l'identifiant de restauration au Gestionnaire d'identifiants. Cela vous permet de connecter automatiquement l'utilisateur sans qu'il ait à saisir d'informations supplémentaires.
  3. Effacez les identifiants de restauration : lorsque l'utilisateur se déconnecte de votre application, vous devez supprimer les identifiants de restauration associés.

La fonctionnalité de restauration des identifiants peut s'intégrer facilement aux systèmes backend qui ont déjà implémenté des clés d'accès. Cette compatibilité est due au fait que les clés d'accès et les clés de restauration (type d'identifiant utilisé par la fonctionnalité Restaurer les identifiants) respectent les mêmes spécifications techniques sous-jacentes. Cet alignement permet de s'assurer que le processus de restauration des identifiants peut récupérer et rétablir efficacement les identifiants utilisateur stockés dans les systèmes compatibles avec les clés d'accès, offrant ainsi une expérience cohérente et conviviale sur différentes plates-formes et méthodes d'authentification.

Bottom sheet du Gestionnaire d'identifiants
Figure 1. Diagramme illustrant la restauration des données d'une application sur un nouvel appareil à l'aide d'un identifiant de restauration, y compris la création de l'identifiant, le lancement d'un flux de restauration et la connexion automatique de l'utilisateur

Implémentation

L'API Restore Credentials est disponible via la bibliothèque Jetpack Credential Manager. Pour commencer, procédez comme suit :

  1. Ajoutez la dépendance Credential Manager à votre projet.

    // build.gradle.kts
    implementation("androidx.credentials:credentials:1.5.0-alpha03")
    
  2. Créer un objet CreateRestoreCredentialRequest.

  3. Appelez la méthode createCredential() sur l'objet CredentialManager.

    val credentialManager = CredentialManager.create(context)
    
    // On a successful authentication create a Restore Key
    // Pass in the context and CreateRestoreCredentialRequest object
    val response = credentialManager.createCredential(context, createRestoreRequest)
    

    Cet identifiant de restauration généré est un type d'identifiant WebAuthn, également appelé clé de restauration.

  4. Lorsque l'utilisateur configure un nouvel appareil, appelez la méthode getCredential() sur l'objet CredentialManager.

    // Fetch the Authentication JSON from server
    val authenticationJson = fetchAuthenticationJson()
    
    // Create the GetRestoreCredentialRequest object
    val options = GetRestoreCredentialOption(authenticationJson)
    val getRequest = GetCredentialRequest(listOf(options))
    
    // The restore key can be fetched in two scenarios to
    // 1. On the first launch of app on the device, fetch the Restore Key
    // 2. In the onRestore callback (if the app implements the Backup Agent)
    val response = credentialManager.getCredential(context, getRequest)
    
  5. Lorsque l'utilisateur se déconnecte de votre application, appelez la méthode clearCredentialState() sur l'objet CredentialManager.

    // Create a ClearCredentialStateRequest object
    val clearRequest = ClearCredentialStateRequest(TYPE_CLEAR_RESTORE_CREDENTIAL)
    
    // On user log-out, clear the restore key
    val response = credentialManager.clearCredentialState(clearRequest)
    

Si vous utilisez un agent de sauvegarde, effectuez la partie getCredential dans le rappel onRestore. Cela garantit que les identifiants de l'application sont restaurés immédiatement après la restauration des données de l'application.

Questions fréquentes

Q1. Quelle est la différence entre une clé de restauration et une clé d'accès ?

Une clé de restauration fonctionne de la même manière qu'une clé d'accès, mais elle est spécifiquement conçue pour la restauration de compte sur de nouveaux appareils. Lorsque vous utilisez un gestionnaire de mots de passe tel que le Gestionnaire de mots de passe de Google pour vous authentifier, vos clés d'accès et mots de passe utilisables s'affichent, mais pas la clé de restauration, car elle n'est pas destinée aux connexions régulières.

Q2. Une clé de restauration est-elle un identifiant à usage unique ?

Non, une clé de restauration n'est pas un identifiant à usage unique. Le Gestionnaire d'identifiants est sans état et ne tient pas compte de l'activité de l'utilisateur. Il ne peut donc pas supprimer automatiquement la clé après utilisation.

Les clés de restauration ne sont supprimées que dans les cas suivants :

  • Actions au niveau du système : les utilisateurs désinstallent l'application ou effacent ses données.
  • Appels au niveau de l'application : vous supprimez la clé de manière programmatique en appelant CredentialManager#clearCredentialState() lorsque vous gérez la déconnexion de l'utilisateur dans le code de votre application.

Q3. La fonctionnalité de restauration des identifiants ne fonctionne-t-elle que pour un nouvel appareil ?

Oui, cette fonctionnalité est conçue pour la configuration initiale d'un nouvel appareil Android, car elle est directement liée à la fonctionnalité de sauvegarde et de restauration du système.

Q4. Puis-je utiliser RestoreCredentials pour connecter silencieusement un utilisateur à n'importe quel appareil sur lequel le même compte Google est connecté ?

Non, la fonctionnalité de restauration des identifiants n'est pas destinée à être utilisée pour la connexion générale sur les appareils. Elle ne fonctionne que dans un scénario spécifique : lorsqu'un utilisateur configure un nouvel appareil en restaurant une sauvegarde de son ancien appareil. Pour que cette restauration ponctuelle fonctionne, les deux appareils doivent être associés au même compte Google.

Q5. Mon organisation dispose d'une application principale et de plusieurs sous-applications. Une clé de restauration peut-elle fonctionner pour toutes ces applications ?

Non. Une clé de restauration est associée au nom de package unique d'une application. Étant donné que votre application principale et chaque sous-application ont des noms de package différents, vous devez créer une clé de restauration distincte pour chaque application.

Q6. Une clé d'accès est-elle requise pour créer une clé de récupération pour le compte d'un utilisateur ?

Non, une clé d'accès n'est pas requise. La possibilité de créer une clé de restauration est indépendante de la méthode de connexion de l'utilisateur. Son objectif est d'enregistrer l'état d'authentification actuel de l'utilisateur. Tant que l'utilisateur est connecté à votre application, vous pouvez générer une clé de restauration pour lui.

Q7. L'utilisateur peut-il supprimer la clé de restauration ?

Non, l'utilisateur n'a aucun contrôle direct sur la clé de restauration. La logique de l'application est responsable de la gestion des clés de restauration.

Pour des raisons de sécurité, nous vous recommandons que l'application supprime automatiquement la clé chaque fois qu'un utilisateur se déconnecte. Cela permet de s'assurer que la prochaine fois qu'ils ouvriront l'application sur le même appareil, ils seront correctement déconnectés et seront invités à se reconnecter.

Q8. Puis-je utiliser RestoreCredentials sans définir allowBackup sur "true" dans mon fichier manifeste ?

Oui, la fonctionnalité Restaurer les identifiants fonctionne que la valeur de allowBackup soit définie sur "true" ou non.

Q9. Comment la restauration des identifiants fonctionne-t-elle pour les utilisateurs connectés à plusieurs comptes dans la même application ?

La fonctionnalité de restauration des identifiants est conçue pour ne fonctionner qu'avec un seul compte à la fois.