Wenn ein Nutzer einen Passkey erstellt, speichert der Server der vertrauenden Partei bestimmte Details, während der Anmeldedatenanbieter, z. B. der Google Passwortmanager, andere Details speichert. Im Detail:
- Der Server der vertrauenden Partei speichert die Anmeldedaten des öffentlichen Schlüssels.
- 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 und beim Anmeldedatenanbieter gespeicherten Daten können zu einer schlechten Nutzererfahrung führen. In den folgenden Szenarien können Probleme auftreten:
- Anmeldedaten werden auf dem Server der vertrauenden Partei gelöscht, aber nicht beim Anmeldedatenanbieter. Dadurch werden dem Nutzer die gelöschten Anmeldedaten vom Anmeldedatenanbieter angezeigt.
- Ein Nutzername oder Anzeigename wird auf dem Server der vertrauenden Partei aktualisiert, aber nicht beim Anmeldedatenanbieter. Dadurch werden dem Nutzer die veralteten Details vom Anmeldedatenanbieter angezeigt.
Mit der Signal API von Credential Manager können vertrauende Parteien mit den Anmeldedatenanbietern kommunizieren, 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 ist
ab Version 1.6.0-beta03 der androidx.credentials
Bibliothek verfügbar.
Implementierung
So verwenden Sie die Signal API:
Fügen Sie Ihrem Projekt die Credential Manager-Abhängigkeit hinzu.
Kotlin
dependencies { implementation("androidx.credentials:credentials:1.7.0-alpha01") }
Groovy
dependencies { implementation "androidx.credentials:credentials:1.7.0-alpha01" }
Signal API aufrufen
Verwenden Sie eine unterstützte Signalanfrage, um eine Signalanfrage an den Anmeldedatenanbieter zu senden. Für jeden Signalanfragetyp ist eine JSON-Anfrage erforderlich, wie in den folgenden Beispielen gezeigt:
Unbekannte Anmeldedaten (
SignalUnknownCredentialRequest)Verwenden Sie
SignalUnknownCredentialRequest, um zu signalisieren, dass Anmeldedaten abgelehnt und als unbekannt betrachtet werden. 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 bestätigen 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
rpIdundcredentialId. Weitere Informationen zur JSON-Struktur finden Sie unter Optionen für 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() ) )Alle akzeptierten Anmeldedaten (
SignalAllAcceptedCredentialIdsRequest)Verwenden Sie
SignalAllAcceptedCredentialIdsRequest, um Anmeldedatenanbieter über alle akzeptierten Anmeldedaten zu informieren. Sobald der Anmeldedatenanbieter das Signal empfängt, blendet er alle Anmeldedaten aus oder löscht sie, die nicht in dieser Liste enthalten sind. Außerdem blendet er alle zuvor ausgeblendeten Anmeldedaten ein, die jetzt in der Liste enthalten sind.Verwendung
Verwenden Sie dieses Signal, wenn die Passkey-Bestätigung durch die vertrauende Partei fehlschlägt. Das 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 senden müssen.
Die erforderlichen JSON-Parameter für diese Anfrage sind
rpId,userIdundallAcceptedCredentialIds. Weitere Informationen zur JSON Struktur finden Sie unter Optionen für 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() ) )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 Passkey-Metadaten aktualisiert, die mit dem Nutzerkonto verknüpft sind.
Die erforderlichen JSON-Parameter für diese Anfrage sind
rpId,userId,nameunddisplayName. Weitere Informationen zur JSON Struktur finden Sie unter Optionen für 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() ) )
Implementierung testen
So testen Sie Ihre Implementierung der Signal API:
Installieren Sie das Anmeldedatenanbieter-Beispiel MyVault.
Aktivieren Sie MyVault als Anmeldedatenanbieter unter Einstellungen > Passwörter, Passkeys und Konten > Bevorzugter Dienst.
Aktivieren Sie alle Benachrichtigungen für MyVault unter Einstellungen > Apps > MyVault > Benachrichtigungen.
Prüfen Sie, ob Auf dem Bildschirm anzeigen für Benachrichtigungen unter Einstellungen > Apps > MyVault > Benachrichtigungen > Kategorien > Signal API Notification Channel aktiviert ist.
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 können Sie prüfen, ob der Anmeldedatenanbieter die Anfragen erhalten hat.