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

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

  • Serwer strony zależnej zapisuje dane uwierzytelniające klucza publicznego.
  • Dostawca danych logowania zapisuje nazwę użytkownika, wyświetlaną nazwę, klucz prywatny i inne powiązane metadane. Te metadane pomagają użytkownikom zidentyfikować i wybrać wymagany klucz dostępu podczas logowania.

Potencjalne niespójności między danymi zapisanymi na serwerze strony zależnej a dostawcą danych logowania mogą negatywnie wpływać na wrażenia użytkowników. Problemy mogą pojawić się w tych sytuacjach:

  • Dane logowania zostały usunięte na serwerze strony uzależnionej, ale nie u dostawcy danych logowania, co powoduje, że dostawca danych logowania wyświetla użytkownikowi usunięte dane logowania.
  • Nazwa użytkownika lub wyświetlana nazwa została zaktualizowana na serwerze strony uzależnionej, ale nie u dostawcy danych logowania, co powoduje, że dostawca danych logowania wyświetla nieaktualne informacje.

Interfejs Signal API Menedżera danych logowania umożliwia stronom zależnym komunikowanie się z dostawcami danych logowania w celu usuwania danych logowania i aktualizowania metadanych użytkownika, takich jak nazwa użytkownika i wyświetlana nazwa. Istnieją 3 obsługiwane typy żądań dla różnych scenariuszy:

  • SignalUnknownCredentialRequest

    • Wskazuje, że określone dane logowania nie są już prawidłowe i powinny zostać ukryte lub usunięte z dostawcy danych logowania.
  • SignalAllAcceptedCredentialIdsRequest

    • Udostępnia dostawcy danych logowania 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 w bibliotece androidx.credentials w wersji 1.6.0-beta03 lub nowszej.

Implementacja

Aby użyć interfejsu Signal API, wykonaj te czynności:

  1. Dodaj zależność Credential Manager do swojego projektu.

    Kotlin

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

    Groovy

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

  2. Wywoływanie interfejsu Signal API

    Aby wysłać żądanie sygnału do dostawcy danych logowania, 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ą uznawane za nieznane. Gdy dostawca danych logowania otrzyma ten sygnał, ukryje lub usunie dane logowania.

      Wykorzystanie

      Użyj tego sygnału, gdy strona uzależniona nie może zweryfikować asercji 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 dla tego żądania to rpId i credentialId. 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 dane uwierzytelniające (SignalAllAcceptedCredentialIdsRequest)

      Użyj SignalAllAcceptedCredentialIdsRequest, aby powiadomić dostawców danych logowania o zestawie wszystkich zaakceptowanych danych logowania. Gdy dostawca danych logowania otrzyma sygnał, ukrywa lub usuwa wszystkie dane logowania, które nie znajdują się na tej liście, lub odkrywa wszystkie 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ę zależną nie powiedzie się. Ten błąd oznacza, ż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 dostawcom danych logowania.

      Wymagane parametry JSON dla tego żądania to rpId, userId i allAcceptedCredentialIds. Więcej informacji o strukturze JSON znajdziesz w sekcji Opcje 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 wyświetlana nazwa danego użytkownika, zostały zaktualizowane i powinny pojawić się u dostawcy danych logowania.

      Wykorzystanie

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

      Wymagane parametry JSON dla tego żądania to rpId, userId, name i displayName. 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 sekcji Ustawienia > Hasła, klucze dostępu i konta > Preferowana usługa.

    Menu Preferowana usługa w ustawieniach Androida z włączoną aplikacją MyVault jako dostawcą 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 dla powiadomień w sekcji Ustawienia > Aplikacje > MyVault > Powiadomienia > Kategorie > Kanał powiadomień interfejsu Signal API.

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

  5. W aplikacji uruchom procesy, 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.