WebAuthn (Web Authentication) to standard W3C umożliwiający bezpieczne, bezhasłowe i odporne na phishing uwierzytelnianie przy użyciu kryptografii klucza publicznego. Jest szeroko stosowany z kluczami dostępu (passkeys) w celu poprawy bezpieczeństwa i doświadczenia użytkownika. Jednak uwierzytelnianie użytkowników za pomocą WebAuthn to dopiero pierwszy krok — po pomyślnym uwierzytelnieniu często musisz autoryzować ich działania w wielu punktach końcowych API.
W tym artykule omówimy:
- Używanie WebAuthn do uwierzytelniania opartego na kluczach dostępu.
- Odbieranie tokenu bearer z serwera WebAuthn.
- Używanie zwróconego tokenu bearer do autoryzacji kolejnych żądań HTTP.
1. Zrozumienie przepływu uwierzytelniania WebAuthn
WebAuthn opiera się na kryptografii klucza publicznego i danych uwierzytelniających przechowywanych bezpiecznie po stronie klienta (np. kluczach dostępu w przeglądarce lub urządzeniu). Przepływ uwierzytelniania zazwyczaj obejmuje następujące kroki:
Krok 1: Inicjacja uwierzytelniania- Klient (przeglądarka/aplikacja) żąda od serwera wyzwania WebAuthn.
- Serwer generuje wyzwanie i wysyła je do klienta.
- Przeglądarka używa WebAuthn API (
navigator.credentials.get) do podpisania wyzwania kluczem prywatnym przechowywanym w kluczu dostępu. - Podpisana asercja jest odsyłana do serwera.
- Serwer WebAuthn weryfikuje asercję przy użyciu odpowiedniego klucza publicznego.
- Jeśli jest prawidłowa, serwer uwierzytelnia użytkownika.
W tym momencie potwierdziłeś tożsamość użytkownika, ale nadal potrzebujesz sposobu na autoryzację dostępu do swoich API.
2. Zwracanie tokenu bearer po pomyślnym uwierzytelnieniu WebAuthn
Jeśli chcesz, aby po pomyślnym uwierzytelnieniu serwer wysłał token bearer używany do otwarcia nowego połączenia WebSocket lub HTTP, przekaż parametr token = true. Przykład:
{
"username": "alice@example.com", "token": true
}
Po pomyślnym uwierzytelnieniu serwer wyśle odpowiedź w następującym formacie:
{
"verified": "ok",
"authentication": {
"token": "C760C1C39E3D4E829693A13F18F5CFDE537B516336FC48F7BAB0276176F9E6DE"
}
}
Zdarzenie OnWebAuthnUnauthorized jest wywoływane, gdy żądanie nie jest autoryzowane i zostanie rozłączone. Tutaj możesz skonfigurować, które punkty końcowe wymagają uwierzytelniania WebAuthn, a które nie.
Dlaczego warto używać tokenu bearer?
- Eliminuje konieczność ponownego uwierzytelniania przy każdym żądaniu.
- Umożliwia autoryzację bezstanową w mikrousługach.
- Bezproblemowo integruje się z nowoczesnymi wzorcami zabezpieczeń API.
3. Używanie tokenu bearer do autoryzacji API
Gdy masz już nowy token, wyślij nagłówek autoryzacji z tym tokenem bearer. Możesz użyć właściwości CustomHeaders komponentu TsgcHTTP1Client do skonfigurowania tokenu Bearer. Przykład:
procedure GetHTTPRequest(const aURL: string; const aToken: string): string;
var
oHTTP: TsgcHTTP1Client;
begin
oHTTP := TsgcHTTP1Client.Create(nil);
Try
oHTTP.Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + aToken);
result := oHTTP.Get(aURL);
Finally
oHTTP.Free;
End;
end;
4. Przegląd przepływu end-to-end
Oto kompletna sekwencja wysokopoziomowa:

