API de Credential Manager - Holder

La API de Credential Manager - Holder permite que las apps para Android administren y presenten credenciales digitales a los verificadores.

Comenzar

Para usar la API de Credential Manager - Holder, agrega las siguientes dependencias a la secuencia de comandos de compilación del módulo de tu app:

// In your app module's build.gradle:
dependencies {
    implementation(libs.androidx.registry.provider)
    implementation(libs.androidx.registry.provider.play.services)
}

// In libs.versions.toml:
registryDigitalCredentials = "1.0.0-alpha01"

androidx-registry-provider = { module = "androidx.credentials.registry:registry-provider", version.ref = "registryDigitalCredentials" }
androidx-registry-provider-play-services = { module = "androidx.credentials.registry:registry-provider-play-services", version.ref = "registryDigitalCredentials" }

Registra credenciales con el Administrador de credenciales

Una billetera debe registrar los metadatos de las credenciales para que el Administrador de credenciales pueda filtrarlos y mostrarlos en el selector de credenciales cuando llegue una solicitud.

Imagen que muestra la IU de credenciales digitales en el Administrador de credenciales
Figura 1: IU de credenciales digitales.

IU del selector del Administrador de credenciales

El formato de estos metadatos se pasa a un RegisterCredentialsRequest. Crea un [RegistryManager][1] y registra las credenciales:

En este ejemplo, los metadatos se compilan a partir de una base de datos de entradas de credenciales. Puedes encontrar una referencia en nuestra billetera de ejemplo que registra los metadatos cuando se carga la app. En el futuro, la API de Jetpack admitirá la composición de la base de datos de credenciales. En ese momento, puedes registrar los metadatos de la credencial como estructuras de datos bien definidas.

El registro persiste después de que se reinicia el dispositivo. Si vuelves a registrar el mismo registro del mismo ID y tipo, se reemplazará el registro anterior. Por lo tanto, solo debes volver a registrarte cuando cambien los datos de tu credencial.

Opcional: Crea un comparador

El Administrador de credenciales es agonista de protocolo; trata el registro de metadatos como un objeto blob opaco y no verifica ni comprueba su contenido. Por lo tanto, la billetera debe proporcionar un comparador, un objeto binario ejecutable que pueda procesar los datos de la billetera y generar los metadatos de visualización en función de una solicitud entrante. El Administrador de credenciales ejecutará el comparador en un entorno de zona de pruebas sin acceso a la red ni al disco, de modo que no se filtre nada a una billetera antes de que se renderice la IU al usuario.

La API de Credential Manager proporcionará comparadores para protocolos populares, actualmente, OpenID4VP. Aún no se lanzó oficialmente, por lo que, por ahora, usa nuestro comparador de muestra para el protocolo OpenID4VP v24.

Controla una credencial seleccionada

A continuación, la billetera debe controlar cuándo el usuario selecciona una credencial. Puedes definir una actividad que escuche el filtro de intents androidx.credentials.registry.provider.action.GET_CREDENTIAL. En nuestra billetera de ejemplo, se muestra este procedimiento.

El intent que inicia la actividad contendrá la solicitud del verificador y el origen de la llamada, que se pueden extraer con la función PendingIntentHandler.retrieveProviderGetCredentialRequest. La API muestra un ProviderGetCredentialRequest que contiene toda la información asociada con la solicitud de verificador determinada. Hay tres componentes clave:

  • La app que realizó la solicitud. Puedes recuperarlo con getCallingAppInfo.
  • La credencial seleccionada Puedes obtener información sobre qué candidato eligió el usuario a través del método de extensión selectedEntryId, que coincidirá con el ID de credencial que registraste.
  • Cualquier solicitud específica que haya realizado el verificador Puedes obtener esto del método getCredentialOptions. En este caso, deberías encontrar un elemento GetDigitalCredentialOption en esta lista, que contiene la solicitud de credenciales digitales.

Por lo general, el verificador realizará una solicitud de presentación de credenciales digitales para que puedas procesarla con el siguiente código de muestra:

request.credentialOptions.forEach { option ->
    if (option is GetDigitalCredentialOption) {
        Log.i(TAG, "Got DC request: ${option.requestJson}")
        processRequest(option.requestJson)
    }
}

Puedes ver un ejemplo de esto en nuestra billetera de ejemplo.

Renderiza la IU de la billetera

Una vez que se selecciona la credencial, se invoca la billetera y se dirige al usuario a su IU. En el ejemplo, esta es una solicitud biométrica.

Muestra la respuesta de la credencial

Una vez que la billetera esté lista para enviar el resultado, puedes hacerlo terminando la actividad con la respuesta de la credencial:

PendingIntentHandler.setGetCredentialResponse(
    resultData,
    GetCredentialResponse(DigitalCredential(response.responseJson))
)
setResult(RESULT_OK, resultData)
finish()

Si hay una excepción, puedes enviar la excepción de credencial de la siguiente manera:

PendingIntentHandler.setGetCredentialException(
    resultData,
    GetCredentialUnknownException() // Configure the proper exception
)
setResult(RESULT_OK, resultData)
finish()

Consulta la app de ejemplo para ver un ejemplo de cómo mostrar la respuesta de credencial en contexto.