TOTP w Delphi: uwierzytelnianie dwuskładnikowe

Dodaj drugi składnik logowania z sześciocyfrowymi kodami Google Authenticator, Microsoft Authenticator lub Authy. Wygeneruj sekret, pokaż go jako kod QR i weryfikuj kody na swoim serwerze.

TsgcTOTPAuthenticator

Komponent niewizualny implementujący hasła jednorazowe oparte na czasie (RFC 6238) i na liczniku (RFC 4226). Nigdy nie otwiera połączenia, więc działa jednakowo w formularzu logowania, w API REST i w serwerze WebSocket.

Klasa komponentu

TsgcTOTPAuthenticator (jednostka sgcAuth_TOTP)

Platformy

Windows, macOS, Linux, iOS, Android

Edycja

Enterprise i All-Access, a także pakiet sgcAuth. Dostępny również w sgcWebSockets .NET.

Zarejestruj użytkownika, następnie weryfikuj kody

Wywołaj GenerateSecret raz na użytkownika, pokaż GetProvisioningURI jako kod QR, zapisz sekret i sprawdzaj każdy kod wpisany przy logowaniu za pomocą VerifyCode.

uses
  sgcAuth_TOTP;

var
  TOTP: TsgcTOTPAuthenticator;
  vSecret, vURI: string;
begin
  TOTP := TsgcTOTPAuthenticator.Create(nil);
  TOTP.Issuer := 'Example App';

  // rejestracja: nowy sekret Base32 i URI otpauth:// dla kodu QR
  vSecret := TOTP.GenerateSecret;
  vURI := TOTP.GetProvisioningURI('alice@example.com', vSecret);
  // zapisz vSecret przy rekordzie użytkownika, wyrenderuj vURI jako kod QR

  // logowanie: sprawdź kod wpisany przez użytkownika
  if TOTP.VerifyCode(vSecret, edtCode.Text) then
    ShowMessage('Code accepted');

  // jednorazowe kody odzyskiwania na wypadek utraty telefonu
  TOTP.GenerateRecoveryCodes(memoRecovery.Lines, 10);
end;
// uses: sgcAuth_TOTP
TsgcTOTPAuthenticator *TOTP = new TsgcTOTPAuthenticator(this);
TOTP->Issuer = "Example App";

String Secret = TOTP->GenerateSecret();
String URI = TOTP->GetProvisioningURI("alice@example.com", Secret);

if (TOTP->VerifyCode(Secret, edtCode->Text))
  ShowMessage("Code accepted");

TOTP->GenerateRecoveryCodes(memoRecovery->Lines, 10);

Co jest w środku

Wszystko, czego potrzebuje drugi składnik logowania, od pierwszego kodu QR po odzyskanie dostępu po utracie urządzenia. Przechowywanie sekretów pozostaje w Twoich rękach.

Sekrety i provisioning QR

GenerateSecret zwraca losowy sekret Base32 o długości SecretLength bajtów (domyślnie 20). GetProvisioningURI buduje URI otpauth://totp/ z Issuer, Algorithm, Digits i Period, gotowe do wyrenderowania jako kod QR.

Tolerancja przesunięcia zegara

VerifyCode akceptuje bieżący krok czasowy oraz Window kroków przed nim i po nim (domyślnie 1), więc telefon z zegarem przesuniętym o kilka sekund nadal loguje użytkownika.

Ochrona przed powtórzeniem

Przeciążenie VerifyCode z aLastTimeStep akceptuje tylko krok czasowy późniejszy niż ostatnio użyty i zwraca dopasowany krok, więc kod nigdy nie może zostać użyty dwukrotnie.

Liczniki HOTP

GenerateHOTP i VerifyHOTP implementują wariant oparty na liczniku dla tokenów sprzętowych, z oknem wyprzedzenia, które resynchronizuje licznik po udanej weryfikacji.

Kody odzyskiwania

GenerateRecoveryCodes wypełnia dowolny TStrings unikalnymi jednorazowymi kodami, będącymi rozwiązaniem awaryjnym, gdy użytkownik traci urządzenie z aplikacją authenticator.

Algorytmy i cyfry

HMAC-SHA1 (domyślny, obsługiwany przez każdą aplikację), HMAC-SHA256 lub HMAC-SHA512 przez Algorithm, kody od 6 do 8 Digits i dowolny Period.

Specyfikacje i odniesienia

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

Dokumentacja i dema

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

Pomoc online — TsgcTOTPAuthenticator Pełna dokumentacja właściwości i metod tego komponentu.
Projekt demo — Demos\26.Authentication\02.TOTP Rejestracja z kodem QR, kody na żywo, weryfikacja z ochroną przed powtórzeniem i kody odzyskiwania. 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.
Blog: Logowanie w Delphi z Passkeys, SAML SSO, LDAP i TOTP 2FA Jak sześć komponentów uwierzytelniania współpracuje w jednej aplikacji Delphi.
Najkorzystniejsza oferta: All-AccessWszystkie produkty eSeGeCe, ze wsparciem Premium w cenie, już od €1,059 rocznie.
Zobacz cennik All-Access

Gotowy na dodanie uwierzytelniania dwuskładnikowego?

Pobierz bezpłatną wersję próbną i zabezpiecz logowania w swojej aplikacji Delphi kodami z aplikacji authenticator.