Quando un utente crea una passkey, il server della relying party salva alcuni dettagli, mentre il fornitore di credenziali, ad esempio Gestore delle password di Google, ne salva altri. Nello specifico:
- Il server della relying party salva la credenziale della chiave pubblica.
- Il fornitore di credenziali salva il nome utente, il nome visualizzato, la chiave privata e altri metadati associati. Questi metadati aiutano gli utenti a identificare e selezionare la passkey richiesta durante l'accesso.
Le potenziali incoerenze tra i dati salvati sul server della relying party e il fornitore di credenziali possono portare a esperienze utente negative. Possono sorgere problemi nei seguenti scenari:
- Una credenziale viene eliminata sul server della relying party, ma non sul provider di credenziali, che di conseguenza mostra all'utente la credenziale eliminata.
- Un nome utente o un nome visualizzato viene aggiornato sul server della relying party, ma non sul fornitore di credenziali, che mostra i dettagli obsoleti.
L'API Signal di Credential Manager consente alle relying party di comunicare con i provider di credenziali per eliminare le credenziali e aggiornare i metadati utente, ad esempio il nome utente e il nome visualizzato. Esistono tre tipi di richieste supportati per diversi scenari:
SignalUnknownCredentialRequest- Indica che una credenziale specifica non è più valida e deve essere nascosta o rimossa dal fornitore di credenziali.
SignalAllAcceptedCredentialIdsRequest- Fornisce un elenco di ID credenziali accettati al fornitore di credenziali.
SignalCurrentUserDetailsRequest- Aggiorna i dettagli dei metadati dell'utente.
Compatibilità delle versioni
L'API Signal è disponibile sui dispositivi con Android 15 o versioni successive e a partire dalla versione 1.6.0-beta03 della libreria androidx.credentials.
Implementazione
Per utilizzare l'API Signal, segui questi passaggi:
Aggiungi la dipendenza Credential Manager al tuo progetto.
Kotlin
dependencies { implementation("androidx.credentials:credentials:1.6.0-rc01") }
Trendy
dependencies { implementation "androidx.credentials:credentials:1.6.0-rc01" }
Chiama l'API Signal
Per inviare una richiesta di indicatore al fornitore di credenziali, utilizza una richiesta di indicatore supportata. Ciascuno dei tipi di richiesta di indicatori richiede una richiesta JSON, come mostrato negli esempi seguenti:
Credenziale sconosciuta (
SignalUnknownCredentialRequest)Utilizza
SignalUnknownCredentialRequestper indicare che una credenziale è rifiutata e considerata sconosciuta. Quando il fornitore di credenziali riceve questo segnale, nasconde o elimina la credenziale.Utilizzo
Utilizza questo indicatore quando la relying party non riesce a verificare un'asserzione passkey. Ciò implica che la passkey non è valida e deve essere nascosta o rimossa dal fornitore di credenziali.
I parametri JSON richiesti per questa richiesta sono
rpIdecredentialId. Per saperne di più sulla struttura JSON, consulta Opzioni signalUnknownCredential.credentialManager.signalCredentialState( SignalUnknownCredentialRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("credentialId", credentialId /* [String] Credential ID of the credential to be hidden or deleted */) }.toString() ) )Tutte le credenziali accettate (
SignalAllAcceptedCredentialIdsRequest)Utilizza
SignalAllAcceptedCredentialIdsRequestper comunicare ai fornitori di credenziali l'insieme di tutte le credenziali accettate. Una volta ricevuto l'indicatore dal fornitore di credenziali, quest'ultimo nasconde o elimina le credenziali non incluse in questo elenco oppure mostra le credenziali precedentemente nascoste che ora sono incluse nell'elenco.Utilizzo
Utilizza questo indicatore quando la verifica della passkey non va a buon fine da parte della relying party. Questo errore indica che la passkey non è valida e deve essere nascosta o rimossa dal fornitore di credenziali. Puoi utilizzare questo segnale ogni volta che devi trasmettere l'insieme di ID credenziali noti ai fornitori di credenziali.
I parametri JSON richiesti per questa richiesta sono
rpId,userIdeallAcceptedCredentialIds. Per saperne di più sulla struttura JSON, consulta Opzioni di signalAllAcceptedCredential.credentialManager.signalCredentialState( SignalAllAcceptedCredentialIdsRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("userId", userId /* [String] User ID of the current user */) put( "allAcceptedCredentialIds", JSONArray(credentialIdsList /* [List<String>] List of accepted Credential IDs */) ) }.toString() ) )Dettagli utente attuali (
SignalCurrentUserDetailsRequest)Utilizza
SignalCurrentUserDetailsRequestper comunicare ai fornitori di credenziali che i metadati, come il nome utente e il nome visualizzato per un determinato utente, sono stati aggiornati e devono essere visualizzati nel fornitore di credenziali.Utilizzo
Utilizza questo segnale quando l'utente o la relying party aggiorna i metadati della passkey associati all'account utente.
I parametri JSON richiesti per questa richiesta sono
rpId,userId,nameedisplayName. Per ulteriori informazioni sulla struttura JSON, consulta Opzioni di signalCurrentUserDetails.credentialManager.signalCredentialState( SignalCurrentUserDetailsRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("userId", userId /* [String] User ID of the current user */) put("name", name /* [String] New Name to be updated for the current user */) put("displayName", displayName /* [String] New display name to be updated for the current user */) }.toString() ) )
Testare l'implementazione
Per testare l'implementazione dell'API Signal, completa i seguenti passaggi:
Installa l'esempio di provider di credenziali denominato MyVault.
Attiva MyVault come fornitore di credenziali in Impostazioni > Password, passkey e account > Servizio preferito.
Attiva tutte le notifiche per MyVault in Impostazioni > App > MyVault > Notifiche.
Verifica che l'opzione Pop-up sullo schermo sia attiva per le notifiche in Impostazioni > App > MyVault > Notifiche > Categorie > Canale di notifica API Signal.
Nella tua app, attiva i flussi che inviano le richieste di indicatori al fornitore di credenziali. Dovresti vedere le notifiche di MyVault sullo schermo. In questo modo viene verificato che il fornitore di credenziali abbia ricevuto le richieste.