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

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:

  1. 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"
    }

  2. 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 rpIdcredentialId. 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, userIdallAcceptedCredentialIds. 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, namedisplayName. 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:

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

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

    Menu Usługa preferowana 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ń API sygnału.

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

  5. 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.