Szczegółowe informacje dotyczące weryfikacji użytkowników

Z tego dokumentu dowiesz się, co to jest userVerification w WebAuthn i jakie zachowania przeglądarki są skutkiem określenia userVerification podczas tworzenia lub uwierzytelniania klucza dostępu.

Co to jest „weryfikacja użytkownika” w WebAuthn?

Klucze dostępu są oparte na kryptografii klucza publicznego. Tworząc klucz dostępu, generowana jest para kluczy publiczny-prywatny, klucz prywatny jest przechowywany przez dostawcę kluczy dostępu, a klucz publiczny jest zwracany do serwera uzależnionego (RP) w celu zapisania. Serwer może uwierzytelnić użytkownika, weryfikując podpis podpisany tym samym kluczem dostępu przy użyciu sparowanego klucza publicznego. Polecenie „przez użytkownika” (UP) na danych logowania klucza publicznego dowodzi, że ktoś korzystał z urządzenia podczas uwierzytelniania.

Weryfikacja użytkowników to opcjonalna warstwa zabezpieczeń, która ma na celu potwierdzenie, że podczas uwierzytelniania była obecna właściwa osoba, a nie tylko jakaś osoba, zgodnie z informacjami o obecności użytkownika. Na smartfonach zwykle robi się to za pomocą blokady ekranu. Może to być blokada biometryczna, za pomocą kodu PIN lub hasła. Określa, czy w kolumnie „UV” przeprowadzono weryfikację użytkownika. flaga zwracana w danych uwierzytelniających podczas rejestracji i uwierzytelniania klucza dostępu

Zrzut ekranu okna weryfikacji użytkownika w pęku kluczy iCloud w systemie macOS. Okno z prośbą o zalogowanie się za pomocą Touch ID zawiera informacje o źródle żądania uwierzytelnienia i nazwie użytkownika. W jego prawym górnym rogu znajduje się przycisk „Anuluj”.
Okno weryfikacji użytkownika w pęku kluczy iCloud w systemie macOS.
.
.
Zrzut ekranu okna weryfikacji użytkownika w Chrome na Androida. W oknie dialogowym wyświetli się prośba o potwierdzenie tożsamości za pomocą rozpoznawania twarzy lub odcisku palca oraz informacje o źródle żądającym uwierzytelnienia. W lewym dolnym rogu ekranu widoczna jest opcja weryfikacji za pomocą kodu PIN.
Okno weryfikacji użytkownika w Chrome na Androida.

Jak weryfikowane są podwyższone wartości i poziomy UV na serwerze

Flagi wartości logicznych obecności użytkownika (UP) i weryfikacji użytkownika (UV) są sygnalizowane serwerowi w polu danych modułu uwierzytelniającego. Podczas uwierzytelniania zawartość pola danych uwierzytelniających można zweryfikować, weryfikując podpis przy użyciu zapisanego klucza publicznego. O ile podpis jest prawidłowy, serwer może uznać flagi za oryginalne.

Ilustracja struktury danych dotyczących uwierzytelniania. Od lewej do prawej w każdej sekcji struktury danych znajduje się informacja „HASH RP ID”. (32 bajty), „FLAGS” (1 bajt), „COUNTER” (4 bajty, big-endian uint32), „ATTESTE CRED. DATA (zmienna długość, jeśli występuje) i „ROZSZERZENIA” (zmienna długość, jeśli występuje (CBOR)). „FLAGS” została rozwinięta i zobaczysz listę potencjalnych flag oznaczonych etykietami od lewej do prawej: „ED”, „AT”, „0”, „BS”, „BE”, „UV”, „0” i „UP”.
Pola danych z aplikacji Authenticator w danych logowania klucza publicznego.

Podczas rejestracji i uwierzytelniania klucza dostępu serwer powinien sprawdzać, czy flaga UP ma wartość true oraz czy flaga UV ma wartość true czy false (w zależności od wymagania).

Określanie parametru userVerification

Zgodnie ze specyfikacją WebAuthn punkt dostępu dla użytkowników może zażądać weryfikacji użytkownika za pomocą parametru userVerification zarówno podczas tworzenia, jak i potwierdzania danych logowania. Akceptowane są wartości 'preferred', 'required' oraz 'discouraged', co oznacza odpowiednio:

  • 'preferred' (domyślnie): zalecamy korzystanie z metody weryfikacji użytkownika na urządzeniu, ale można ją pominąć, jeśli nie jest dostępna. Dane uwierzytelniające odpowiedź zawierają wartość flagi UV true, jeśli przeprowadzono weryfikację użytkownika, lub false, jeśli nie została przeprowadzona.
  • 'required': wymagane jest wywołanie metody weryfikacji użytkownika dostępnej na urządzeniu. Jeśli wartość jest niedostępna, żądanie nie zostanie zrealizowane lokalnie. Oznacza to, że dane uwierzytelniające odpowiedzi są zawsze zwracane z flagą UV ustawioną na true.
  • 'discouraged': odradzamy stosowanie metody weryfikacji użytkownika. W zależności od urządzenia weryfikacja użytkownika może jednak zostać przeprowadzona, a flaga UV może zawierać wartość true lub false.

Przykładowy kod do tworzenia klucza dostępu:

const publicKeyCredentialCreationOptions = {
  // ...
  authenticatorSelection: {
    authenticatorAttachment: 'platform',
    residentKey: 'required',
    requireResidentKey: true,
    userVerification: 'preferred'
  }
};

const credential = await navigator.credentials.create({
  publicKey: publicKeyCredentialCreationOptions
});

Przykładowy kod uwierzytelniania za pomocą klucza dostępu:

const publicKeyCredentialRequestOptions = {
  challenge: /* Omitted challenge data... */,
  rpId: 'example.com',
  userVerification: 'preferred'
};

const credential = await navigator.credentials.get({
  publicKey: publicKeyCredentialRequestOptions
});

Którą opcję wybierzesz w przypadku: userVerification?

Wartość userVerification, której należy użyć, zależy od wymagań aplikacji i wrażeń użytkownika.

Kiedy używać funkcji userVerification='preferred'

Jeśli dbasz o wygodę użytkowników, a nie ochronę, wybierz userVerification='preferred'.

W niektórych środowiskach weryfikacja użytkowników jest bardziej utrudniona niż ochrona. Na przykład w systemie macOS, w którym funkcja Touch ID jest niedostępna (ponieważ urządzenie jej nie obsługuje, jest wyłączone lub działa w trybie tradycyjnej obudowy), użytkownik zostanie poproszony o wpisanie hasła systemowego. Powoduje to problemy i użytkownik może całkowicie zrezygnować z uwierzytelniania. Jeśli wyeliminowanie przeszkód jest dla Ciebie ważniejsze, skorzystaj z narzędzia userVerification='preferred'.

Zrzut ekranu z oknem z kluczem dostępu w systemie macOS, który pojawia się, gdy funkcja Touch ID jest niedostępna. To okno zawiera informacje takie jak źródło żądania uwierzytelnienia oraz nazwa użytkownika. W jego prawym górnym rogu znajduje się przycisk „Anuluj”.
Okno z kluczem dostępu wyświetlane w systemie macOS, gdy funkcja Touch ID jest niedostępna.

W przypadku ustawienia userVerification='preferred' flaga UV ma wartość true, jeśli weryfikacja użytkownika została przeprowadzona pomyślnie, a false, jeśli weryfikacja użytkownika została pominięta. Na przykład w systemie macOS, w którym funkcja Touch ID jest niedostępna, użytkownik jest proszony o kliknięcie przycisku w celu pominięcia weryfikacji użytkownika. Dane logowania klucza publicznego zawierają flagę UV false.

Flaga UV może więc być sygnałem w Twojej analizie ryzyka. Jeśli z powodu innych czynników próba logowania wydaje się ryzykowna, możesz wyświetlić użytkownikowi dodatkowe testy zabezpieczające logowanie, jeśli użytkownik nie został zweryfikowany.

Kiedy używać funkcji userVerification='required'

Użyj funkcji userVerification='required', jeśli uważasz, że zarówno zwiększanie, jak i UV jest absolutnie konieczne.

Wadą tej opcji jest to, że podczas logowania mogą być utrudnione. Na przykład w systemie macOS, w którym funkcja Touch ID jest niedostępna, użytkownik zostanie poproszony o wpisanie hasła systemowego.

Dzięki userVerification='required' możesz mieć pewność, że weryfikacja użytkownika zostanie przeprowadzona na urządzeniu. Upewnij się, że serwer sprawdza, czy flaga UV ma wartość true.

Podsumowanie

Dzięki weryfikacji użytkownika strony używające kluczy dostępu mogą oszacować prawdopodobieństwo zalogowania się przez właściciela urządzenia. To oni decydują, czy weryfikacja użytkownika ma być wymagana, czy opcjonalna w zależności od tego, jak krytyczny mechanizm zapasowego logowania wpływa na przepływ użytkowników. Sprawdź, czy serwer sprawdza flagę UP i UV pod kątem uwierzytelniania użytkownika przy użyciu klucza dostępu.