Prostsze wykrywanie funkcji WebAuthn za pomocą funkcji getClientCapabilities()

Data publikacji: 15 stycznia 2025 r.

WebAuthn zapewnia unikalne funkcje, takie jak interakcja z Bluetooth w przypadku protokołu hybrydowego, komunikacja z dostawcami kluczy dostępu i proponowanie kluczy dostępu w autouzupełnianiu. Różne klienty i uwierzytelniacze oferują jednak różne poziomy obsługi funkcji WebAuthn. Ta rozbieżność może prowadzić do fragmentarycznego wrażenia użytkownika, w którym niektórzy użytkownicy mogą napotkać błędy lub nie być w stanie korzystać z określonych opcji uwierzytelniania. Udostępnienie deweloperom sposobu na określenie możliwości klienta umożliwia im tworzenie bardziej niezawodnych procesów uwierzytelniania, które dostosowują się do tych różnic.

Metoda PublicKeyCredential.getClientCapabilities() pozwala stronom uwierzytelniającym określić, które funkcje WebAuthn są obsługiwane przez przeglądarkę. Metoda zwraca obietnicę, która jest mapowana na listę obsługiwanych funkcji, co pozwala deweloperom dostosować proces uwierzytelniania i przepływy pracy do konkretnych możliwości klienta.

Zgodność

Browser Support

  • Chrome: 133.
  • Edge: 133.
  • Firefox: 135.
  • Safari: 17.4.

Source

getClientCapabilities()

getClientCapabilities() to interfejs WebAuthn API, który umożliwia stronom uwierzytelniającym określenie dostępnych funkcji. Aby korzystać z interfejsu API, musisz wywołać funkcję PublicKeyCredential.getClientCapabilities(). Zwracana obietnica jest obiektem zawierającym możliwości, z których każda wskazuje swoją dostępność za pomocą wartości true lub false. Jeśli wartość to undefined, oznacza to, że dostępność tej funkcji nie jest znana.

if (window.PublicKeyCredential &&
  if (PublicKeyCredential.getClientCapabilities) {
    const capabilities = await PublicKeyCredential.getClientCapabilities();
    if (capabilities.conditionalGet === true &&
        capabilities.passkeyPlatformAuthenticator === true) {
      // The browser supports passkeys and the conditional mediation.
    }
  }
}

conditionalCreate

Jeśli użytkownik już wyraził zgodę na utworzenie danych logowania, przeglądarka może je utworzyć bez wyświetlania modalnego interfejsu użytkownika.

conditionalGet

Przeglądarka może uwierzytelnić użytkownika, wyświetlając klucze dostępu w ramach okna autouzupełniania zamiast w ramach modalnego interfejsu. Dotychczasowy odpowiednik to: PublicKeyCredential.isConditionalMediationAvailable().

hybridTransport

Urządzenie może używać Bluetootha, aby przeglądarka mogła utworzyć dane logowania i za ich pomocą uwierzytelnić się na różnych urządzeniach za pomocą protokołu hybrydowego. Oznacza to zazwyczaj, że przeglądarka może wyświetlić kod QR, aby użytkownik mógł go zeskanować i zalogować się na telefonie, na którym są zapisane dane logowania.

passkeyPlatformAuthenticator

Przeglądarka może utworzyć dane logowania i za ich pomocą uwierzytelnić użytkownika za pomocą uwierzytelniania na platformie lub innego urządzenia obsługującego ten protokół hybrydowy. Odpowiednik: hybridTransport || userVerifyingPlatformAuthenticator.

relatedOrigins

Przeglądarka może utworzyć i użyć danych logowania, które nie pasują do identyfikatora RP, o ile są one określone w pliku z powiązanymi źródłami.

signalAllAcceptedCredentials

Przeglądarka może przekazać dostawcy kluczy dostępu informacje o dostępnych danych logowania na serwerze, aby mógł on aktualizować listę kluczy dostępu zgodnie z informacjami na serwerze.

signalCurrentUserDetails

Przeglądarka może przekazać dostawcy klucza informacje o użytkowniku, takie jak nazwa użytkownika i wyświetlana nazwa na serwerze, aby dostawca klucza mógł zachować spójność informacji o kluczu na serwerze.

signalUnknownCredential

Przeglądarka może przekazać dostawcy kluczy dostępu informację o usunięciu danych logowania na serwerze, aby mógł on zachować spójność listy kluczy dostępu z serwerem.

userVerifyingPlatformAuthenticator

Przeglądarka może tworzyć i uwierzytelniać za pomocą danych logowania na uwierzytelniającym na platformie. Nie oznacza to, że przeglądarka obsługuje protokół hybrydowy. Dotychczasowy odpowiednik to: PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable().

rozszerzenia

Reprezentanci mogą też określać dostępne rozszerzenia za pomocą pola getClientCapabilities().

if (capabilities['extension:appid'] === true) {
  // appId extension is supported
}

Identyfikator ma przedrostek extension:, a za nim następuje nazwa rozszerzenia. Aby uzyskać informacje o nazwach rozszerzeń, zapoznaj się z identyfikatorami rozszerzeń WebAuthn zdefiniowanymi w IANA.

Więcej informacji

Aby dowiedzieć się więcej o kluczach dostępu, zacznij od artykułu Logowanie bez hasła za pomocą kluczy dostępu.