Zadbaj o to, aby dane logowania były zgodne z danymi dostawców danych logowania

Gdy użytkownik tworzy klucz dostępu, serwer strony ufającej zapisuje pewne szczegóły, a dostawca danych uwierzytelniających, np. Menedżer haseł Google, zapisuje inne. Więcej szczegółów:

  • Serwer strony ufającej zapisuje dane logowania za pomocą klucza publicznego.
  • Dostawca danych uwierzytelniających zapisuje nazwę użytkownika, wyświetlaną nazwę, klucz prywatny i inne powiązane metadane. Te metadane pomagają użytkownikom identyfikować i wybierać wymagany klucz dostępu podczas logowania.

Potencjalne niezgodności między danymi zapisanymi na serwerze strony ufającej a danymi dostawcy danych uwierzytelniających mogą pogorszyć wygodę użytkowników. Problemy mogą wystąpić w tych sytuacjach:

  • Poświadczenie jest usuwane na serwerze strony ufającej, ale nie u dostawcy poświadczeń, co powoduje, że dostawca poświadczeń wyświetla użytkownikowi usunięte poświadczenie.
  • Nazwa użytkownika lub nazwa wyświetlana zostanie zaktualizowana na serwerze strony ufającej, ale nie u dostawcy danych uwierzytelniających, co spowoduje, że dostawca danych uwierzytelniających będzie wyświetlać nieaktualne dane.

Signal API Menedżera danych logowania umożliwia stronom ufającym komunikowanie się z dostawcami danych uwierzytelniających w celu usuwania danych logowania i aktualizowania metadanych użytkownika, takich jak nazwa użytkownika i wyświetlana nazwa. W różnych scenariuszach obsługiwane są 3 typy żądań:

  • SignalUnknownCredentialRequest

    • Wskazuje, że określone dane logowania są już nieprawidłowe i powinny zostać ukryte lub usunięte przez dostawcę danych uwierzytelniających.
  • SignalAllAcceptedCredentialIdsRequest

    • Przekazuje dostawcy danych uwierzytelniających listę zaakceptowanych identyfikatorów danych logowania.
  • SignalCurrentUserDetailsRequest

    • Aktualizuje metadane użytkownika.

Zgodność wersji

Interfejs Signal API jest dostępny na urządzeniach z Androidem 15 lub nowszym oraz jest dostępny od wersji 1.6.0-beta03 biblioteki androidx.credentials.

Implementacja

Aby korzystać z interfejsu Signal API:

  1. Dodaj do projektu zależność od Menedżera danych logowania.

    Kotlin

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

    Groovy

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

  2. Wywołaj interfejs Signal API.

    Aby wysłać żądanie sygnału do dostawcy danych uwierzytelniających, 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 zasygnalizować, że dane logowania zostały odrzucone i są uważane za nieznane. Gdy dostawca danych uwierzytelniających 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 uwierzytelniających.

      Wymagane parametry JSON tego żądania to rpId i credentialId. Więcej informacji o strukturze JSON znajdziesz w sekcji signalUnknownCredential options.

      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 zaakceptowane dane logowania (SignalAllAcceptedCredentialIdsRequest)

      Użyj SignalAllAcceptedCredentialIdsRequest, aby powiadomić dostawców danych uwierzytelniających o zestawie wszystkich zaakceptowanych danych logowania. Gdy dostawca danych uwierzytelniających otrzyma sygnał, ukryje lub usunie wszystkie dane logowania, które nie są uwzględnione na tej liście, albo odkryje wcześniej ukryte dane logowania, które są teraz na liście.

      Wykorzystanie

      Użyj tego sygnału, gdy weryfikacja klucza dostępu przez stronę ufającą nie powiedzie się. Oznacza to, że klucz dostępu jest nieprawidłowy i musi zostać ukryty lub usunięty przez dostawcę danych uwierzytelniających. Możesz też użyć tego sygnału, gdy musisz rozgłosić zestaw znanych identyfikatorów danych logowania dostawcom danych uwierzytelniających.

      Wymagane parametry JSON tego żądania to rpId, userId i allAcceptedCredentialIds. Więcej informacji o strukturze JSON znajdziesz w sekcji signalAllAcceptedCredential options.

      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()
          )
      )
      
    • Dane bieżącego użytkownika (SignalCurrentUserDetailsRequest)

      Użyj SignalCurrentUserDetailsRequest, aby powiadomić dostawców danych uwierzytelniających, że metadane, takie jak nazwa użytkownika i wyświetlana nazwa danego użytkownika, zostały zaktualizowane i powinny być widoczne u dostawcy danych uwierzytelniających.

      Wykorzystanie

      Użyj tego sygnału, gdy użytkownik lub strona ufająca zaktualizuje metadane klucza dostępu powiązane z kontem użytkownika.

      Wymagane parametry JSON tego żądania to rpId, userId, name i displayName. Więcej informacji o strukturze JSON znajdziesz w sekcji signalCurrentUserDetails options.

      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:

  1. Zainstaluj przykładowego dostawcę danych uwierzytelniających o nazwie MyVault.

  2. Włącz MyVault jako dostawcę danych uwierzytelniających w sekcji Ustawienia > Hasła, klucze dostępu i konta > Preferowana usługa.

    Menu Preferowana usługa w ustawieniach Androida, w którym MyVault jest włączony jako dostawca danych logowania.

  3. Włącz wszystkie powiadomienia dla MyVault w sekcji Ustawienia > Aplikacje > MyVault > Powiadomienia.

    Menu powiadomień w aplikacji MyVault z włączonymi wszystkimi powiadomieniami.

  4. Sprawdź, czy opcja Wyświetlaj na ekranie jest włączona w przypadku powiadomień w sekcji Ustawienia > Aplikacje > MyVault > Powiadomienia > Kategorie > Kanał powiadomień Signal API.

    Ustawienia kanału powiadomień interfejsu Signal API dla MyVault z włączoną opcją „Wyświetlaj na ekranie”.

  5. W aplikacji wywołaj procesy, które wysyłają żądania sygnału do dostawcy danych uwierzytelniających. Na ekranie powinny pojawić się powiadomienia z MyVault. Potwierdza to, że dostawca danych uwierzytelniających otrzymał żądania.