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ń.
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ń.
Implementuje stronę serwera relying-party WebAuthn — tworzy wyzwania poświadczeń, weryfikuje odpowiedzi navigator.credentials, analizuje oświadczenia atestacji i waliduje podpisy asercji.
TsgcWSAPIServer_WebAuthn
Windows, macOS, Linux, iOS, Android
Enterprise
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;
Serwer relying-party przekształcający proces Delphi w endpoint uwierzytelniania obsługujący passkey.
OnWebAuthnRegistrationOptionsRequest przyjmuje żądanie PublicKeyCredentialCreationOptions, przeglądarka wywołuje navigator.credentials.create(), serwer waliduje atestację, a OnWebAuthnRegistrationSuccessful zwraca nowy rekord poświadczenia.
OnWebAuthnAuthenticationOptionsRequest wypełnia PublicKeyCredentialRequestOptions wcześniej zapisanymi rekordami poświadczeń, serwer waliduje podpis asercji przy użyciu zapisanego klucza publicznego i wywołuje OnWebAuthnAuthenticationSuccessful.
Obsługuje formaty oświadczeń atestacji: none, packed, fido-u2f, tpm, android-key, android-safetynet i apple.
Ś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ć.
UserVerification można ustawić na required, preferred lub discouraged dla każdej ceremonii — krok walidacji wymusza wybór.
OnWebAuthnAuthenticationOptionsRequest przekazuje Ci żądanie, abyś zwrócił właściwe CredentialRecords dla listy allowCredentials trwającego logowania. Sposób przechowywania projektujesz sam.
Autorytatywne źródła dla standardów implementowanych przez ten komponent.
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.
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.
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.
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.
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.
Zapisz rekord w OnWebAuthnRegistrationSuccessful, wyszukaj poświadczenie logowania bez nazwy użytkownika lub przez autouzupełnianie w OnWebAuthnAuthenticationGetCredential i zapisz nowy licznik w OnWebAuthnAuthenticationSuccessful.
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.
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. | Open | |
| 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. | Open | |
| Dokument techniczny (PDF) Funkcje, szybki start, przykłady kodu dla Delphi i C++ Builder oraz odwołania do źródeł — tylko dla tego komponentu. | Open | |
| Podręcznik użytkownika (PDF) Kompleksowy podręcznik obejmujący każdy komponent biblioteki. | Open |