Anmeldedaten mit Anmeldedatenanbietern synchronisieren

Wenn ein Nutzer einen Passkey erstellt, werden bestimmte Details auf dem Server der vertrauenden Partei gespeichert, während andere vom Anmeldedatenanbieter, z. B. dem Google Passwortmanager, gespeichert werden. Im Detail:

  • Der Server der vertrauenden Partei speichert die Anmeldedaten für den öffentlichen Schlüssel.
  • Der Anmeldedatenanbieter speichert den Nutzernamen, den Anzeigenamen, den privaten Schlüssel und andere zugehörige Metadaten. Diese Metadaten helfen Nutzern, den erforderlichen Passkey bei der Anmeldung zu identifizieren und auszuwählen.

Potenzielle Inkonsistenzen zwischen den auf dem Server der vertrauenden Partei gespeicherten Daten und dem Anmeldedatenanbieter können zu einer schlechten Nutzererfahrung führen. In den folgenden Fällen können Probleme auftreten:

  • Eine Anmeldedaten werden auf dem Server der vertrauenden Partei gelöscht, aber nicht beim Anmeldedatenanbieter. Dieser zeigt die gelöschten Anmeldedaten dem Nutzer an.
  • Ein Nutzername oder Anzeigename wird auf dem Server der vertrauenden Partei aktualisiert, nicht aber beim Anmeldedatenanbieter. Daher werden beim Anmeldedatenanbieter die veralteten Details angezeigt.

Mit der Signal API von Credential Manager können sich vertrauende Parteien mit den Anmeldedatenanbietern austauschen, um Anmeldedaten zu löschen und Nutzermetadaten wie den Nutzernamen und den Anzeigenamen zu aktualisieren. Es gibt drei unterstützte Anfragetypen für verschiedene Szenarien:

  • SignalUnknownCredentialRequest

    • Gibt an, dass bestimmte Anmeldedaten nicht mehr gültig sind und vom Anmeldedatenanbieter ausgeblendet oder entfernt werden sollten.
  • SignalAllAcceptedCredentialIdsRequest

    • Stellt dem Anmeldedatenanbieter eine Liste der akzeptierten Anmeldedaten-IDs zur Verfügung.
  • SignalCurrentUserDetailsRequest

    • Aktualisiert die Metadatendetails des Nutzers.

Versionskompatibilität

Die Signal API ist auf Geräten mit Android 15 oder höher verfügbar und ab Version 1.6.0-beta03 der Bibliothek androidx.credentials verfügbar.

Implementierung

So verwenden Sie die Signal API:

  1. Fügen Sie Ihrem Projekt die Credential Manager-Abhängigkeit hinzu.

    Kotlin

    dependencies {
        implementation("androidx.credentials:credentials:1.6.0-rc01")
    }

    Groovy

    dependencies {
        implementation "androidx.credentials:credentials:1.6.0-rc01"
    }

  2. Signal API aufrufen

    Verwenden Sie eine unterstützte Signalanfrage, um eine Signalanfrage an den Anmeldedatenanbieter zu senden. Für jeden der Signalanfragetypen ist eine JSON-Anfrage erforderlich, wie in den folgenden Beispielen gezeigt:

    • Unbekannte Anmeldedaten (SignalUnknownCredentialRequest)

      Verwenden Sie SignalUnknownCredentialRequest, um anzugeben, dass ein Anmeldedatenpaar abgelehnt und als unbekannt betrachtet wird. Wenn der Anmeldedatenanbieter dieses Signal empfängt, blendet er die Anmeldedaten aus oder löscht sie.

      Verwendung

      Verwenden Sie dieses Signal, wenn die vertrauende Partei eine Passkey-Assertion nicht überprüfen kann. Das bedeutet, dass der Passkey ungültig ist und vom Anmeldedatenanbieter ausgeblendet oder entfernt werden muss.

      Die erforderlichen JSON-Parameter für diese Anfrage sind rpId und credentialId. Weitere Informationen zur JSON-Struktur finden Sie unter signalUnknownCredential-Optionen.

      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()
          )
      )
      
    • Alle akzeptierten Anmeldedaten (SignalAllAcceptedCredentialIdsRequest)

      Verwenden Sie SignalAllAcceptedCredentialIdsRequest, um Anmeldedatenanbieter über alle akzeptierten Anmeldedaten zu informieren. Sobald das Signal vom Anmeldedatenanbieter empfangen wird, werden alle Anmeldedaten, die nicht in dieser Liste enthalten sind, vom Anmeldedatenanbieter ausgeblendet oder gelöscht. Alle zuvor ausgeblendeten Anmeldedaten, die jetzt in der Liste enthalten sind, werden wieder eingeblendet.

      Verwendung

      Verwenden Sie dieses Signal, wenn die Passkey-Bestätigung durch die vertrauende Partei fehlschlägt. Dieser Fehler bedeutet, dass der Passkey ungültig ist und vom Anmeldedatenanbieter ausgeblendet oder entfernt werden muss. Sie können dieses Signal auch verwenden, wenn Sie die Gruppe der bekannten Anmeldedaten-IDs an Anmeldedatenanbieter übertragen müssen.

      Die erforderlichen JSON-Parameter für diese Anfrage sind rpId, userId und allAcceptedCredentialIds. Weitere Informationen zur JSON-Struktur finden Sie unter signalAllAcceptedCredential-Optionen.

      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()
          )
      )
      
    • Details zum aktuellen Nutzer (SignalCurrentUserDetailsRequest)

      Verwenden Sie SignalCurrentUserDetailsRequest, um Anmeldedatenanbieter darüber zu informieren, dass Metadaten wie der Nutzername und der Anzeigename für einen bestimmten Nutzer aktualisiert wurden und im Anmeldedatenanbieter angezeigt werden sollten.

      Verwendung

      Verwenden Sie dieses Signal, wenn der Nutzer oder die vertrauende Partei die mit dem Nutzerkonto verknüpften Passkey-Metadaten aktualisiert.

      Die erforderlichen JSON-Parameter für diese Anfrage sind rpId, userId, name und displayName. Weitere Informationen zur JSON-Struktur finden Sie unter signalCurrentUserDetails-Optionen.

      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()
          )
      )
      

Implementierung testen

So testen Sie Ihre Implementierung der Signal API:

  1. Installieren Sie das Beispiel für den Anmeldeinformationsanbieter mit dem Namen MyVault.

  2. Aktivieren Sie MyVault als Anmeldedatenanbieter in den Einstellungen > Passwörter, Passkeys und Konten > Bevorzugter Dienst.

    Das Menü „Bevorzugter Dienst“ in den Android-Einstellungen, in dem MyVault als Anmeldedatenanbieter aktiviert ist.

  3. Aktivieren Sie alle Benachrichtigungen für MyVault unter Einstellungen > Apps > MyVault > Benachrichtigungen.

    Das Benachrichtigungsmenü für die MyVault App, in dem alle Benachrichtigungen aktiviert sind.

  4. Prüfen Sie, ob Auf dem Display einblenden für Benachrichtigungen in den Einstellungen > Apps > MyVault > Benachrichtigungen > Kategorien > Signal API-Benachrichtigungschannel aktiviert ist.

    Signal API-Benachrichtigungskanal-Einstellungen für MyVault, bei denen die Option „Auf dem Bildschirm einblenden“ aktiviert ist.

  5. Lösen Sie in Ihrer App die Abläufe aus, die die Signalanfragen an den Anmeldedatenanbieter senden. Auf dem Bildschirm sollten Benachrichtigungen von MyVault angezeigt werden. So wird bestätigt, dass der Anmeldedatenanbieter die Anfragen erhalten hat.