Autenticación con contraseñas

Si bien Credential Manager admite el acceso basado en contraseñas, te recomendamos que priorices los métodos de autenticación modernos y más seguros, como las llaves de acceso y Acceder con Google. Estos métodos ofrecen una seguridad y una experiencia del usuario significativamente mejores. Sin embargo, si tu aplicación debe admitir contraseñas, usa esta guía como referencia para implementar contraseñas con el Administrador de credenciales.

Credential Manager proporciona una API unificada para que tu app guarde y recupere las credenciales del usuario, incluidos los nombres de usuario y las contraseñas. Esto simplifica el proceso de acceso para los usuarios y les permite utilizar proveedores de credenciales sin problemas.

Requisitos previos

La implementación de contraseñas de Credential Manager funciona en dispositivos con Android 4.4 (nivel de API 19) y versiones posteriores.

Descripción general

En esta guía, se explican los cambios necesarios en tu app para crear, guardar y acceder con una contraseña.

  • Agrega dependencias a tu app: Agrega las bibliotecas necesarias del Administrador de credenciales.
  • Crea una instancia de Credential Manager: Crea una instancia de Credential Manager.
  • Guardar la contraseña del usuario: Almacena las credenciales del usuario de forma segura.
  • Acceder con una contraseña: Recupera y usa las credenciales almacenadas para acceder.
  • Identifica los campos que deberían usar Autocompletar: Usa Autocompletar para brindar una mejor experiencia del usuario.
  • Agregar compatibilidad con Vínculos de recursos digitales: Agrega compatibilidad para compartir contraseñas entre apps y sitios web vinculados.

Agrega dependencias a tu app

Agrega las siguientes dependencias al archivo build.gradle del módulo de tu app:

Kotlin

dependencies {
    implementation("androidx.credentials:credentials:1.7.0-alpha02")
}

Groovy

dependencies {
    implementation "androidx.credentials:credentials:1.7.0-alpha02"
}

Crea una instancia del Credential Manager

Usa el contexto de tu app o actividad para crear un objeto CredentialManager.

// Use your app or activity context to instantiate a client instance of
// CredentialManager.
private val credentialManager = CredentialManager.create(context)

Guarda la contraseña del usuario

Cuando un usuario se registre o actualice su contraseña correctamente en tu app, guarda estas credenciales en su administrador de contraseñas.

  1. Construye una solicitud de contraseña: El objeto CreatePasswordRequest contiene el nombre de usuario y la contraseña que se guardarán. Llama a credentialManager.createCredential() para iniciar el proceso de guardado.

  2. Controla la respuesta: Procesa el objeto CreatePasswordResponse y controla los errores (por ejemplo, si el usuario cancela la solicitud).

suspend fun registerPassword(username: String, password: String) {
    // Initialize a CreatePasswordRequest object.
    val createPasswordRequest =
        CreatePasswordRequest(id = username, password = password)

    // Create credential and handle result.
    coroutineScope {
        try {
            val result =
                credentialManager.createCredential(
                    // Use an activity based context to avoid undefined
                    // system UI launching behavior.
                    activityContext,
                    createPasswordRequest
                )
            // Handle register password result
        } catch (e: CreateCredentialException) {
            handleFailure(e)
        }
    }
}

Cómo acceder con una contraseña

Para recuperar las credenciales guardadas, compila un GetCredentialRequest con un GetPasswordOption y llama a getCredential(). Para filtrar las contraseñas que se recuperan según los IDs de usuario especificados, usa el campo opcional allowedUserIds.

val getPasswordOption = GetPasswordOption()

val credentialRequest = GetCredentialRequest.Builder()
    .addCredentialOption(getPasswordOption)
    .build()

Identifica los campos que deberían usar el autocompletado

El atributo android:isCredential ayuda a los proveedores de credenciales a identificar los campos destinados al autocompletar, lo que genera una experiencia del usuario más fluida. Este atributo complementa el autofillHints existente.

Estos son algunos de los beneficios de indicar que ciertos campos están destinados al autocompletar:

  • Mayor precisión del autocompletado: Ayuda a los administradores de contraseñas y al sistema Android a identificar mejor los campos destinados a las credenciales.
  • Experiencia del usuario mejorada: Puede generar sugerencias de autocompletar más fluidas y confiables.

Incluye el atributo isCredential en los campos de nombre de usuario y contraseña, como se muestra en el siguiente ejemplo:

<EditText
    android:id="@+id/username_edittext"
    android:autofillHints="username"
    android:isCredential="true" />

<EditText
    android:id="@+id/password_edittext"
    android:inputType="textPassword"
    android:autofillHints="password"
    android:isCredential="true" />

Como alternativa, agrega el atributo de forma programática, como se muestra en el siguiente fragmento:

if (android.os.Build.VERSION.SDK_INT >=
    android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { // Android 14
    usernameEditText.isCredential = true
    passwordEditText.isCredential = true
}

Para garantizar la compatibilidad con los administradores de contraseñas, debes configurar vínculos de recursos digitales entre tu app y tu sitio web. Esto permite que las credenciales se compartan de forma segura en ambas plataformas.