Mantieni le credenziali coerenti con i fornitori di credenziali

Quando un utente crea una passkey, il server della relying party salva alcuni dettagli, mentre il provider di credenziali, ad esempio Gestore delle password di Google, ne salva altri. In particolare:

  • Il server della relying party salva la credenziale della chiave pubblica.
  • Il provider 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 incongruenze tra i dati salvati sul server della relying party e sul provider di credenziali possono portare a esperienze utente negative. I problemi possono verificarsi nei seguenti scenari:

  • Una credenziale viene eliminata sul server della relying party, ma non sul provider di credenziali, che di conseguenza mostra la credenziale eliminata all'utente.
  • Un nome utente o un nome visualizzato viene aggiornato sul server della relying party, ma non sul provider di credenziali, che di conseguenza 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, come 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 provider di credenziali.
  • SignalAllAcceptedCredentialIdsRequest

    • Fornisce un elenco di ID credenziali accettati al provider 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:

  1. Aggiungi la dipendenza di Gestore delle credenziali al tuo progetto.

    Kotlin

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

    Trendy

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

  2. Chiama l'API Signal

    Per inviare una richiesta di indicatori al provider di credenziali, utilizza una richiesta di indicatori supportata. Ciascuno dei tipi di richiesta di indicatori richiede una richiesta JSON, come mostrato negli esempi seguenti:

    • Credenziale sconosciuta (SignalUnknownCredentialRequest)

      Utilizza SignalUnknownCredentialRequest per segnalare che una qualifica è stata rifiutata e considerata sconosciuta. Quando il provider di credenziali riceve questo indicatore, nasconde o elimina la credenziale.

      Utilizzo

      Utilizza questo indicatore quando la relying party non riesce a verificare un'asserzione della passkey. Ciò implica che la passkey non è valida e deve essere nascosta o rimossa dal provider di credenziali.

      I parametri JSON obbligatori per questa richiesta sono rpId e credentialId. Per ulteriori informazioni sulla struttura JSON, consulta le opzioni di 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 SignalAllAcceptedCredentialIdsRequest per notificare ai provider di credenziali l'insieme di tutte le credenziali accettate. Una volta ricevuto il segnale dal provider di credenziali, quest'ultimo nasconde o elimina tutte 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 riesce da parte della relying party. Questo errore significa che la passkey non è valida e deve essere nascosta o rimossa dal provider di credenziali. Puoi anche utilizzare questo segnale ogni volta che devi trasmettere l'insieme di ID credenziali noti ai provider di credenziali.

      I parametri JSON obbligatori per questa richiesta sono rpId, userId e allAcceptedCredentialIds. Per ulteriori informazioni sulla struttura JSON, consulta le 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 dell'utente corrente (SignalCurrentUserDetailsRequest)

      Utilizza SignalCurrentUserDetailsRequest per notificare ai provider 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 provider di credenziali.

      Utilizzo

      Utilizza questo indicatore quando l'utente o la relying party aggiorna i metadati della passkey associati all'account utente.

      I parametri JSON obbligatori per questa richiesta sono rpId, userId, name e displayName. Per ulteriori informazioni sulla struttura JSON, consulta le 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:

  1. Installa l'esempio di provider di credenziali denominato MyVault.

  2. Attiva MyVault come provider di credenziali in Impostazioni > Password, passkey e account > Servizio preferito.

    Il menu Servizio preferito nelle impostazioni di Android, che mostra MyVault abilitato come fornitore di credenziali.

  3. Attiva tutte le notifiche per MyVault in Impostazioni > App > MyVault > Notifiche.

    Il menu Notifiche dell&#39;app MyVault, che mostra tutte le notifiche attivate.

  4. Verifica che l'opzione Mostra sullo schermo sia attiva per le notifiche in Impostazioni > App > MyVault > Notifiche > Categorie > Canale di notifica dell'API Signal.

    Impostazioni del canale di notifica dell&#39;API Signal per MyVault, che mostra l&#39;opzione &quot;Pop-up sullo schermo&quot; attivata.

  5. Nella tua app, attiva i flussi che inviano le richieste di indicatori al provider di credenziali. Dovresti visualizzare le notifiche di MyVault sullo schermo. In questo modo verifichi che il provider di credenziali abbia ricevuto le richieste.