Prostsze wykrywanie funkcji WebAuthn za pomocą funkcji getClientCapabilities()

Data publikacji: 15 stycznia 2025 r.

WebAuthn oferuje unikalne możliwości, takie jak interakcja z Bluetooth w przypadku protokołu hybrydowego, komunikacja z dostawcami kluczy dostępu i sugerowanie kluczy dostępu w autouzupełnianiu. Różni klienci i uwierzytelniający oferują jednak różne poziomy obsługi funkcji WebAuthn. Ta rozbieżność może prowadzić do fragmentacji środowiska użytkownika, w którym niektórzy użytkownicy mogą napotkać błędy lub nie będą mogli korzystać z określonych opcji uwierzytelniania. Umożliwienie deweloperom określania możliwości klienta pozwala im tworzyć bardziej niezawodne procesy uwierzytelniania, które dostosowują się do tych różnic.

Metoda PublicKeyCredential.getClientCapabilities() umożliwia podmiotom polegającym określenie, które funkcje WebAuthn są obsługiwane przez przeglądarkę. Metoda zwraca obietnicę, która jest rozwiązywana jako lista obsługiwanych funkcji, co pozwala programistom dostosowywać procesy uwierzytelniania i przepływy pracy na podstawie konkretnych funkcji klienta.

Zgodność

Browser Support

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

Source

getClientCapabilities()

getClientCapabilities() to interfejs WebAuthn API, który umożliwia podmiotom polegającym określanie dostępnych funkcji. Aby używać interfejsu API, musisz wywołać PublicKeyCredential.getClientCapabilities(). Zwrócony obiekt Promise jest rozpoznawany jako obiekt zawierający funkcje, z których każda wskazuje swoją dostępność za pomocą wartości true lub false. Jeśli funkcja jest oznaczona jako undefined, oznacza to, że jej dostępność jest nieznana.

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 wyraził już zgodę na utworzenie danych logowania, przeglądarka może je utworzyć bez wyświetlania widocznego interfejsu modalnego.

conditionalGet

Przeglądarka może uwierzytelniać użytkownika, wyświetlając klucze dostępu w oknie autouzupełniania zamiast w wyraźnym interfejsie modalnym. Obecny odpowiednik to PublicKeyCredential.isConditionalMediationAvailable().

hybridTransport

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

passkeyPlatformAuthenticator

Przeglądarka może utworzyć dane logowania i uwierzytelnić się za ich pomocą za pomocą uwierzytelniacza platformy weryfikującej użytkownika lub innego urządzenia, które obsługuje ten proces za pomocą protokołu hybrydowego. Odpowiednik: hybridTransport || userVerifyingPlatformAuthenticator.

relatedOrigins

Przeglądarka może utworzyć dane logowania i użyć ich do uwierzytelnienia, które nie pasuje do identyfikatora RP, o ile jest on określony w pliku powiązanych domen.

signalAllAcceptedCredentials

Przeglądarka może sygnalizować dostępne dane logowania na serwerze dostawcy kluczy dostępu, aby dostawca kluczy dostępu mógł utrzymywać listę kluczy dostępu w zgodzie z serwerem.

signalCurrentUserDetails

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

signalUnknownCredential

Przeglądarka może sygnalizować usunięte dane logowania na serwerze dostawcy kluczy dostępu, aby dostawca kluczy dostępu mógł zachować spójność listy kluczy dostępu z serwerem.

userVerifyingPlatformAuthenticator

Przeglądarka może utworzyć dane logowania na platformie uwierzytelniającej i uwierzytelnić się za ich pomocą. Nie oznacza to, że przeglądarka obsługuje protokół hybrydowy. Obecny odpowiednik to PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable().

rozszerzenia

Dostawcy usług mogą też określać dostępne rozszerzenia za pomocą parametru getClientCapabilities().

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

Identyfikator ma przedrostek extension:, po którym następuje nazwa rozszerzenia. Nazwy rozszerzeń znajdziesz w identyfikatorach rozszerzeń WebAuthn zdefiniowanych w IANA.

Więcej informacji

Więcej informacji o kluczach dostępu znajdziesz w artykule Logowanie bez hasła za pomocą kluczy dostępu.