Autoryzacja przy użyciu PassKeys

· Funkcje

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:

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 Krok 2: Asercja danych uwierzytelniających po stronie klienta Krok 3: Weryfikacja po stronie serwera

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?

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: