Gdy użytkownik utworzy klucz dostępu, serwer podmiotu polegającego na uwierzytelnianiu zapisuje pewne szczegóły, a dostawca danych logowania, np. Menedżer haseł Google, zapisuje inne. Więcej szczegółów:
- Serwer strony ufającej zapisuje dane logowania klucza publicznego.
- Dostawca danych logowania zapisuje nazwę użytkownika, nazwę wyświetlaną, klucz prywatny i inne powiązane metadane. Te metadane pomagają użytkownikom zidentyfikować i wybrać wymagany klucz dostępu podczas logowania.
Potencjalne rozbieżności między danymi zapisanymi na serwerze podmiotu ufającego a dostawcą danych logowania mogą pogorszyć wygodę użytkowników. Problemy mogą wystąpić w tych sytuacjach:
- Dane logowania są usuwane na serwerze podmiotu ufającego, ale nie u dostawcy danych logowania, co powoduje, że dostawca danych logowania wyświetla użytkownikowi usunięte dane logowania.
- Nazwa użytkownika lub nazwa wyświetlana została zaktualizowana na serwerze jednostki ufającej, ale nie na serwerze dostawcy danych logowania, co powoduje, że dostawca danych logowania wyświetla nieaktualne informacje.
Interfejs Signal API Menedżera danych logowania umożliwia podmiotom polegającym komunikację z dostawcami danych logowania w celu usuwania danych logowania i aktualizowania metadanych użytkownika, takich jak nazwa użytkownika i wyświetlana nazwa. W przypadku różnych scenariuszy obsługiwane są 3 typy żądań:
SignalUnknownCredentialRequest- Wskazuje, że określone dane logowania nie są już ważne i powinny zostać ukryte lub usunięte z usługi dostarczającej dane logowania.
SignalAllAcceptedCredentialIdsRequest- Przekazuje dostawcy danych logowania listę akceptowanych identyfikatorów danych logowania.
SignalCurrentUserDetailsRequest- Aktualizuje szczegóły metadanych użytkownika.
Zgodność wersji
Signal API jest dostępny na urządzeniach z Androidem 15 lub nowszym i od wersji 1.6.0-beta03 biblioteki androidx.credentials.
Implementacja
Aby korzystać z interfejsu Signal API, wykonaj te czynności:
Dodaj do projektu zależność Credential Manager.
Kotlin
dependencies { implementation("androidx.credentials:credentials:1.6.0-rc01") }
Groovy
dependencies { implementation "androidx.credentials:credentials:1.6.0-rc01" }
Wywoływanie interfejsu Signal API
Aby wysłać do dostawcy danych logowania żądanie sygnału, użyj obsługiwanego żądania sygnału. Każdy typ żądania sygnału wymaga żądania JSON, jak pokazano w tych przykładach:
Nieznane dane logowania (
SignalUnknownCredentialRequest)Użyj
SignalUnknownCredentialRequest, aby wskazać, że dane logowania zostały odrzucone i są uznawane za nieznane. Gdy dostawca danych logowania otrzyma ten sygnał, ukryje lub usunie dane logowania.Wykorzystanie
Użyj tego sygnału, gdy strona ufająca nie może zweryfikować potwierdzenia klucza dostępu. Oznacza to, że klucz dostępu jest nieprawidłowy i musi zostać ukryty lub usunięty przez dostawcę danych logowania.
Wymagane parametry JSON w tym żądaniu to
rpIdicredentialId. Więcej informacji o strukturze JSON znajdziesz w sekcji opcje 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() ) )Wszystkie akceptowane dokumenty (
SignalAllAcceptedCredentialIdsRequest)Użyj
SignalAllAcceptedCredentialIdsRequest, aby powiadomić dostawców danych logowania o zestawie wszystkich zaakceptowanych danych logowania. Gdy sygnał zostanie odebrany przez dostawcę danych logowania, ukrywa on lub usuwa wszystkie dane logowania, które nie znajdują się na tej liście, albo odkrywa wszystkie wcześniej ukryte dane logowania, które teraz znajdują się na liście.Wykorzystanie
Użyj tego sygnału, gdy weryfikacja klucza dostępu przez podmiot polegający nie powiedzie się. Oznacza to, że klucz dostępu jest nieprawidłowy i musi zostać ukryty lub usunięty przez dostawcę danych logowania. Możesz też używać tego sygnału, gdy chcesz przekazać zestaw znanych identyfikatorów danych logowania dostawcom danych logowania.
Wymagane parametry JSON w tym żądaniu to
rpId,userIdiallAcceptedCredentialIds. Więcej informacji o strukturze JSON znajdziesz w sekcji Opcje funkcji 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() ) )Szczegóły bieżącego użytkownika (
SignalCurrentUserDetailsRequest)Użyj
SignalCurrentUserDetailsRequest, aby powiadomić dostawców danych logowania, że metadane, takie jak nazwa użytkownika i nazwa wyświetlana danego użytkownika, zostały zaktualizowane i powinny być widoczne u dostawcy danych logowania.Wykorzystanie
Użyj tego sygnału, gdy użytkownik lub podmiot polegający aktualizuje metadane klucza dostępu powiązane z kontem użytkownika.
Wymagane parametry JSON w tym żądaniu to
rpId,userId,nameidisplayName. Więcej informacji o strukturze JSON znajdziesz w sekcji Opcje 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() ) )
Testowanie implementacji
Aby przetestować implementację interfejsu Signal API, wykonaj te czynności:
Zainstaluj przykładowego dostawcę danych uwierzytelniających o nazwie MyVault.
Włącz MyVault jako dostawcę danych logowania w Ustawieniach > Hasła, klucze dostępu i konta > Preferowana usługa.
Włącz wszystkie powiadomienia dla MyVault w sekcji Ustawienia > Aplikacje > MyVault > Powiadomienia.
Sprawdź, czy opcja Wyświetlaj na ekranie jest włączona w przypadku powiadomień w sekcji Ustawienia > Aplikacje > MyVault > Powiadomienia > Kategorie > Kanał powiadomień API sygnału.
W aplikacji uruchom przepływy, które wysyłają żądania sygnałów do dostawcy danych logowania. Na ekranie powinny pojawić się powiadomienia z MyVault. Potwierdza to, że dostawca danych logowania otrzymał żądania.