Cómo restablecer las credenciales de la app cuando configuras un dispositivo nuevo

La función Restablecer credenciales del Administrador de credenciales permite a los usuarios restablecer sus cuentas de apps cuando configuran un dispositivo nuevo. Esta API se encuentra en versión preliminar para desarrolladores y está disponible en todos los dispositivos que tienen Android 9 o versiones posteriores y la versión 242200000 o posterior de GMS Core de los Servicios de Google Play (GMS). Estos son algunos de los beneficios de la función Restore Credentials:

  • Experiencia del usuario optimizada: Los usuarios pueden restablecer su cuenta de la app sin necesidad de acceder manualmente a cada app individual.
  • Mayor participación de los usuarios: Es más probable que los usuarios sigan usando tu app si pueden restablecer su cuenta cuando configuran un dispositivo nuevo.
  • Menor esfuerzo de desarrollo: La función Restore Credentials está integrada en Credential Manager, por lo que los desarrolladores que ya admiten llaves de acceso pueden agregar capacidades de restablecimiento de credenciales.

Cómo funciona

Puedes usar Restore Credentials para crear, obtener y borrar las credenciales pertinentes.

  1. Crea la credencial de restablecimiento: Cuando el usuario acceda a tu app, crea una credencial de restablecimiento asociada a su cuenta. Esta credencial se almacena de forma local y se sincroniza con la nube si el usuario habilitó la copia de seguridad de Google y la encriptación de extremo a extremo está disponible (las apps pueden inhabilitar la sincronización con la nube).
  2. Obtén la credencial de restablecimiento: Cuando el usuario configura un dispositivo nuevo, tu app puede solicitar la credencial de restablecimiento al Administrador de credenciales. Esto te permite acceder automáticamente a la cuenta del usuario sin necesidad de ingresar información adicional.
  3. Borra la credencial de restablecimiento: Cuando el usuario salga de tu app, debes borrar la credencial de restablecimiento asociada.

La función Restore Credentials se puede integrar sin problemas con los sistemas de backend que ya implementaron llaves de acceso. Esta compatibilidad se debe a que tanto las llaves de acceso como las claves de recuperación (tipo de credencial que usa la función Recuperar credenciales) cumplen con las mismas especificaciones técnicas subyacentes. Esta alineación garantiza que el proceso de restablecimiento de credenciales pueda recuperar y restablecer de manera eficaz las credenciales del usuario almacenadas en sistemas habilitados para llaves de acceso, lo que proporciona una experiencia coherente y fácil de usar en diferentes plataformas y métodos de autenticación.

Hoja inferior del Administrador de credenciales
Figura 1: Diagrama que muestra cómo restablecer los datos de una app en un dispositivo nuevo con una credencial de restablecimiento, lo que incluye la creación de la credencial, el inicio de un flujo de restablecimiento y el acceso automático del usuario

Implementación

La API de Restore Credentials está disponible a través de la biblioteca de Jetpack de Credential Manager. Para comenzar, sigue estos pasos:

  1. Agrega la dependencia de Credential Manager a tu proyecto.

    // build.gradle.kts
    implementation("androidx.credentials:credentials:1.5.0-alpha03")
    
  2. Crearás un objeto CreateRestoreCredentialRequest.

  3. Llama al método createCredential() en el objeto 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)
    

    Esta credencial de restablecimiento generada es un tipo de credencial de WebAuthn y se conoce como clave de restablecimiento.

  4. Cuando el usuario configure un dispositivo nuevo, llama al método getCredential() en el objeto 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. Cuando el usuario salga de tu app, llama al método clearCredentialState() en el objeto 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 usas un agente de copia de seguridad, realiza la parte de getCredential dentro de la devolución de llamada onRestore. Esto garantiza que las credenciales de la app se restablezcan inmediatamente después de que se restablezcan los datos de la app.

Preguntas frecuentes

Q1. ¿Cuál es la diferencia entre una clave de recuperación y una llave de acceso?

Una clave de recuperación funciona de manera similar a una llave de acceso, pero está diseñada específicamente para la recuperación de cuentas en dispositivos nuevos. Cuando usas un administrador de contraseñas, como el Administrador de contraseñas de Google, para autenticarte, se muestran tus llaves de acceso y contraseñas utilizables, pero no la clave de recuperación, ya que no está diseñada para los accesos habituales.

P2. ¿La clave de restablecimiento es una credencial de un solo uso?

No, una clave de recuperación no es una credencial de un solo uso. Credential Manager no tiene estado y no conoce la actividad del usuario, por lo que no puede borrar automáticamente la clave después de usarla.

Las claves de recuperación solo se quitan en las siguientes situaciones:

  • Acciones a nivel del sistema: Los usuarios desinstalan la app o borran sus datos.
  • Llamadas a nivel de la app: Borras la clave de forma programática llamando a CredentialManager#clearCredentialState() cuando controlas el cierre de sesión del usuario en el código de tu app.

Q3. ¿La función Restore Credentials solo funciona en dispositivos nuevos?

Sí, esta función está diseñada para la configuración inicial de un dispositivo nuevo con Android, ya que está vinculada directamente a la función de copia de seguridad y restablecimiento del sistema.

P4. ¿Puedo usar Restore Credentials para acceder de forma silenciosa a la Cuenta de Google de un usuario en cualquier dispositivo en el que se haya accedido a la misma cuenta?

No, la función Restore Credentials no está diseñada para usarse para el acceso general en todos los dispositivos. Solo funciona en una situación específica: cuando un usuario configura un dispositivo nuevo restableciendo una copia de seguridad de su dispositivo anterior. Ambos dispositivos deben estar vinculados a la misma Cuenta de Google para que este proceso de restablecimiento único se realice correctamente.

Q5. Mi organización tiene una app principal y varias subapps. ¿Una clave de restauración puede funcionar para todas estas apps?

No. Una clave de restauración está vinculada al nombre de paquete único de una aplicación. Dado que tu app principal y cada sub-app tienen nombres de paquete diferentes, debes crear una clave de restauración independiente para cada app.

Q6. ¿Se requiere una llave de acceso para crear una clave de recuperación para la cuenta de un usuario?

No, no se requiere una llave de acceso. La capacidad de crear una clave de recuperación es independiente del método de acceso del usuario. Su propósito es guardar el estado de autenticación actual del usuario. Siempre y cuando el usuario haya accedido de forma activa a tu app, puedes generar una clave de restablecimiento para él.

Q7. ¿El usuario puede borrar la clave de restablecimiento?

No, el usuario no tiene control directo sobre la clave de restauración. La lógica de la app es responsable de administrar las claves de restauración.

Por motivos de seguridad, te recomendamos que la app borre automáticamente la clave cada vez que un usuario cierre la sesión. Esto garantiza que, la próxima vez que abran la app en ese mismo dispositivo, se cerrará la sesión correctamente y se les pedirá que vuelvan a acceder.

Q8. ¿Puedo usar Restore Credentials sin establecer allowBackup como verdadero en mi manifiesto?

Sí, la función Restore Credentials funciona independientemente de si allowBackup está configurado como verdadero o no.

P9. ¿Cómo funcionaría la opción Restore Credentials para los usuarios que tienen varias cuentas conectadas en la misma app?

La función Restore Credentials está diseñada para funcionar con una sola cuenta a la vez.