Serwer WebAuthn dla Delphi

Dodaj uwierzytelnianie bezhasłowe oparte na kluczach passkey do serwera Delphi. Ceremonie rejestracji i uwierzytelniania WebAuthn Level 2 / FIDO2, weryfikacja atestacji, hooki przechowywania poświadczeń.

TsgcWSAPIServer_WebAuthn

Implementuje stronę serwera relying-party WebAuthn — tworzy wyzwania poświadczeń, weryfikuje odpowiedzi navigator.credentials, analizuje oświadczenia atestacji i waliduje podpisy asercji.

Klasa komponentu

TsgcWSAPIServer_WebAuthn

Platformy

Windows, macOS, Linux, iOS, Android

Edycja

Enterprise

Zamontuj relying party i przechowuj poświadczenia

Wrzuć TsgcWSAPIServer_WebAuthn na TsgcWebSocketHTTPServer, ustaw WebAuthnOptions.RelyingParty, a następnie obsłuż OnWebAuthnRegistrationSuccessful, aby zapisać każdy nowy klucz passkey, i OnWebAuthnAuthenticationGetCredential, aby wczytać go przy logowaniu.

uses
  sgcWebSocket, sgcWebSocket_Server_APIs, sgcWebAuthn_Classes;

// Server: TsgcWebSocketHTTPServer and WebAuthn: TsgcWSAPIServer_WebAuthn are form fields
procedure TForm1.StartServer;
begin
  Server := TsgcWebSocketHTTPServer.Create(nil);
  Server.Port := 8443;
  Server.SSL  := True;
  Server.SSLOptions.CertFile := 'server.pem';
  Server.SSLOptions.KeyFile  := 'server.pem';
  Server.SSLOptions.Port     := 8443;

  WebAuthn := TsgcWSAPIServer_WebAuthn.Create(nil);
  WebAuthn.Server := Server;
  WebAuthn.WebAuthnOptions.RelyingParty := 'example.com';
  WebAuthn.OnWebAuthnRegistrationSuccessful := OnRegistrationSuccessful;
  WebAuthn.OnWebAuthnAuthenticationGetCredential := OnGetCredential;

  Server.Active := True;
end;

procedure TForm1.OnRegistrationSuccessful(Sender: TObject;
  const aRegistration: TsgcWebAuthn_Registration;
  const aCredentialRecord: TsgcWebAuthn_CredentialRecord; var Accept: Boolean);
begin
  // store the new passkey in your own database
  SaveCredential(aCredentialRecord.CredentialId, aCredentialRecord.AsJSON);
end;

procedure TForm1.OnGetCredential(Sender: TObject; const aCredentialId: string;
  const aCredentialRecord: TsgcWebAuthn_CredentialRecord; var Found: Boolean);
var
  vJSON: string;
begin
  // sign in: load the stored passkey back
  vJSON := LoadCredential(aCredentialId);
  Found := vJSON <> '';
  if Found then
    aCredentialRecord.ReadJSON(vJSON);
end;
// uses: sgcWebSocket, sgcWebSocket_Server_APIs
TsgcWebSocketHTTPServer *Server = new TsgcWebSocketHTTPServer(this);
TsgcWSAPIServer_WebAuthn *WebAuthn = new TsgcWSAPIServer_WebAuthn(this);
WebAuthn->Server = Server;
WebAuthn->WebAuthnOptions->RelyingParty = "example.com";
Server->Active = true;

Co jest w środku

Serwer relying-party przekształcający proces Delphi w endpoint uwierzytelniania obsługujący passkey.

Ceremonia rejestracji

OnWebAuthnRegistrationOptionsRequest przyjmuje żądanie PublicKeyCredentialCreationOptions, przeglądarka wywołuje navigator.credentials.create(), serwer waliduje atestację, a OnWebAuthnRegistrationSuccessful zwraca nowy rekord poświadczenia.

Ceremonia uwierzytelniania

OnWebAuthnAuthenticationOptionsRequest wypełnia PublicKeyCredentialRequestOptions wcześniej zapisanymi rekordami poświadczeń, serwer waliduje podpis asercji przy użyciu zapisanego klucza publicznego i wywołuje OnWebAuthnAuthenticationSuccessful.

Parsowanie atestacji

Obsługuje formaty oświadczeń atestacji: none, packed, fido-u2f, tpm, android-key, android-safetynet i apple.

Walidacja licznika

Śledzi signCount dla każdego poświadczenia w celu wykrycia sklonowanych authenticatorów. Jeśli licznik się cofa, OnWebAuthnAuthenticationError zgłasza błąd, na który możesz zareagować.

Weryfikacja użytkownika

UserVerification można ustawić na required, preferred lub discouraged dla każdej ceremonii — krok walidacji wymusza wybór.

Rekordy poświadczeń

OnWebAuthnAuthenticationOptionsRequest przekazuje Ci żądanie, abyś zwrócił właściwe CredentialRecords dla listy allowCredentials trwającego logowania. Sposób przechowywania projektujesz sam.

Specyfikacje i odniesienia

Autorytatywne źródła dla standardów implementowanych przez ten komponent.

Passkeys w sposób, jakiego oczekują użytkownicy

Passkey to odkrywalne poświadczenie WebAuthn przechowywane przez Windows Hello, iCloud Keychain, Menedżera haseł Google lub klucz bezpieczeństwa. Serwer obsługuje pełne doświadczenie passkey, a poświadczenia pozostają w Twojej własnej bazie danych.

Logowanie bez nazwy użytkownika

Poproś o opcje uwierzytelniania bez podawania nazwy użytkownika. Przeglądarka wyświetla listę kluczy passkey przechowywanych dla Twojej witryny, użytkownik wybiera jeden, a serwer sprawdza zwrócony userHandle.

Autouzupełnianie passkey

Dzięki mediacji warunkowej klucze passkey pojawiają się na liście autouzupełniania pola nazwy użytkownika. Dodaj autocomplete="username webauthn" i wywołaj startAuthentication(options, true) z /sgcWebAuthn.js.

Kilka kluczy passkey na użytkownika

Zarejestruj jeden klucz passkey na laptopie, a drugi na telefonie. Wszystkie klucze passkey konta współdzielą jeden uchwyt użytkownika, a opcje uwierzytelniania wymieniają każdy z nich.

Zsynchronizowany lub przypisany do urządzenia

BackupEligible i BackupState w rekordzie poświadczenia odróżniają zsynchronizowany klucz passkey od klucza bezpieczeństwa przypisanego do urządzenia, dzięki czemu możesz zaproponować drugi klucz passkey użytkownikom z tylko jednym urządzeniem.

Twoja własna baza danych

Zapisz rekord w OnWebAuthnRegistrationSuccessful, wyszukaj poświadczenie logowania bez nazwy użytkownika lub przez autouzupełnianie w OnWebAuthnAuthenticationGetCredential i zapisz nowy licznik w OnWebAuthnAuthenticationSuccessful.

Wykrywanie sklonowanego authenticatora

Licznik podpisów, który się nie zwiększa, jest odrzucany jako możliwy klon, podobnie jak flaga kwalifikowalności do kopii zapasowej, która zmienia się między logowaniami. Zsynchronizowane klucze passkey, które zawsze zgłaszają 0, nadal działają poprawnie.

Przeczytaj Passkeys w Delphi: logowanie bez hasła z WebAuthn oraz temat pomocy Passkeys.

Dokumentacja i dema

Przejdź do dokumentacji komponentu, pobierz gotowy projekt demo i wersję próbną.

Pomoc online — TsgcWSAPIServer_WebAuthn Pełna dokumentacja właściwości, metod i zdarzeń tego komponentu.
Projekt demo — Demos\20.HTTP_Protocol\12.WebAuthn Gotowy do uruchomienia projekt przykładowy. Dołączony do pakietu sgcWebSockets — pobierz wersję próbną poniżej.
Dokument techniczny (PDF) Funkcje, szybki start, przykłady kodu dla Delphi i C++ Builder oraz odwołania do źródeł — tylko dla tego komponentu.
Podręcznik użytkownika (PDF) Kompleksowy podręcznik obejmujący każdy komponent biblioteki.
Najkorzystniejsza oferta: All-AccessWszystkie produkty eSeGeCe, ze wsparciem Premium w cenie, już od €1,059 rocznie.
Zobacz cennik All-Access

Gotowy do dodania uwierzytelniania passkey?

Pobierz bezpłatną wersję próbną i dodaj passkey WebAuthn / FIDO2 do swojego serwera Delphi.