Credential Manager - API Holder

L'API Credential Manager - Holder consente alle app per Android di gestire e presentare le credenziali digitali ai verificatori.

Inizia

Per utilizzare l'API Credential Manager - Holder, aggiungi le seguenti dipendenze allo script di compilazione del modulo dell'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 le credenziali con Gestore delle credenziali

Un portafoglio deve registrare i metadati delle credenziali in modo che Gestore delle credenziali possa filtrarli e visualizzarli nel selettore delle credenziali quando arriva una richiesta.

Immagine che mostra l'interfaccia utente delle credenziali digitali in Gestore delle credenziali
Figura 1. L'interfaccia utente delle credenziali digitali.

Interfaccia utente del selettore di Gestore delle credenziali

Il formato di questi metadati viene passato a un RegisterCredentialsRequest. Crea un [RegistryManager][1] e registra le credenziali:

In questo esempio, i metadati vengono compilati da un database di voci di credenziali. Puoi trovare un riferimento nel nostro wallet di esempio che registra i metadati al caricamento dell'app. In futuro, la composizione del database delle credenziali sarà supportata dall'API Jetpack. A quel punto, puoi registrare i metadati delle credenziali come strutture di dati ben definite.

Il registro persiste dopo i riavvii del dispositivo. La registrazione di nuovo dello stesso registry dello stesso ID e dello stesso tipo sovrascriverà il record del registry precedente. Pertanto, dovresti eseguire nuovamente la registrazione solo quando i dati delle credenziali sono cambiati.

(Facoltativo) Crea un'associazione

Credential Manager è un protocollo agonistico; tratta il registry dei metadati come un blob opaco e non ne verifica o controlla i contenuti. Pertanto, il wallet deve fornire un matcher, un file binario eseguibile che possa elaborare i dati del wallet e generare i metadati di visualizzazione in base a una richiesta in arrivo. Credential Manager eseguirà il corrispettivo in un ambiente sandbox senza accesso alla rete o al disco, in modo che non venga trafugato nulla in un portafoglio prima che l'interfaccia utente venga visualizzata dall'utente.

L'API Gestore delle credenziali fornirà corrispondenze per i protocolli più diffusi, oggi OpenID4VP. Non è ancora stato rilasciato ufficialmente, quindi per il momento utilizza il nostro corrispondente di esempio per il protocollo OpenID4VP v24.

Gestire una credenziale selezionata

Successivamente, il portafoglio deve gestire la selezione di una credenziale da parte dell'utente. Puoi definire un'attività che ascolti il filtro per intent androidx.credentials.registry.provider.action.GET_CREDENTIAL. Il nostro portafoglio di esempio dimostra questa procedura.

L'intent che avvia l'attività conterrà la richiesta del verificatore e l'origine chiamata, che possono essere estratti con la funzionePendingIntentHandler.retrieveProviderGetCredentialRequest. L'API restituisce un ProviderGetCredentialRequest contenente tutte le informazioni associate alla richiesta del verificatore specificata. Esistono tre componenti chiave:

  • L'app che ha effettuato la richiesta. Puoi recuperarlo con getCallingAppInfo.
  • La credenziale selezionata. Puoi ottenere informazioni sul candidato scelto dall'utente tramite il metodo di estensione selectedEntryId, che corrisponde all'ID credenziale che hai registrato.
  • Eventuali richieste specifiche effettuate dal verificatore. Puoi recuperarlo dal metodo getCredentialOptions. In questo caso, dovresti trovare un GetDigitalCredentialOption in questo elenco, contenente la richiesta di credenziali digitali.

In genere, il verificatore effettuerà una richiesta di presentazione della credenziale digitale in modo che tu possa elaborarla con il seguente codice di esempio:

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

Puoi vedere un esempio nel nostro wallet di esempio.

Eseguire il rendering dell'interfaccia utente del portafoglio

Una volta selezionata la credenziale, viene invocato il portafoglio e l'utente viene indirizzato alla relativa UI. Nel sample, si tratta di un prompt biometrico.

Restituire la risposta della credenziale

Quando il portafoglio è pronto per inviare il risultato, puoi farlo completando l'attività con la risposta della credenziale:

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

Se si verifica un'eccezione, puoi inviare l'eccezione delle credenziali in modo simile:

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

Fai riferimento all'app di esempio per un esempio di come restituire la risposta della credenziale nel contesto.