TOTP pour Delphi : authentification à deux facteurs

Ajoute un second facteur à n'importe quelle connexion avec les codes à six chiffres de Google Authenticator, Microsoft Authenticator ou Authy. Crée le secret, affiche-le sous forme de code QR et vérifie les codes sur ton serveur.

TsgcTOTPAuthenticator

Un composant non visuel qui implémente les mots de passe à usage unique basés sur le temps (RFC 6238) et sur le compteur (RFC 4226). Il n'ouvre jamais de connexion, donc il fonctionne aussi bien dans un formulaire de connexion, une API REST ou un serveur WebSocket.

Classe du composant

TsgcTOTPAuthenticator (unit sgcAuth_TOTP)

Plateformes

Windows, macOS, Linux, iOS, Android

Édition

Enterprise et All-Access, ainsi que le pack sgcAuth. Également disponible dans sgcWebSockets .NET.

Inscris l'utilisateur, puis vérifie les codes

Appelle GenerateSecret une fois par utilisateur, affiche GetProvisioningURI sous forme de code QR, stocke le secret, et vérifie chaque code saisi à la connexion avec VerifyCode.

uses
  sgcAuth_TOTP;

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

  // inscription : un nouveau secret Base32 et l'URI otpauth:// pour le code QR
  vSecret := TOTP.GenerateSecret;
  vURI := TOTP.GetProvisioningURI('alice@example.com', vSecret);
  // enregistre vSecret dans la fiche utilisateur, génère vURI comme code QR

  // connexion : vérifie le code saisi par l'utilisateur
  if TOTP.VerifyCode(vSecret, edtCode.Text) then
    ShowMessage('Code accepted');

  // codes de récupération à usage unique pour un téléphone perdu
  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);

Ce qu'il y a à l'intérieur

Tout ce dont un second facteur a besoin, du premier code QR à la récupération d'un appareil perdu. Le stockage des secrets reste sous ton contrôle.

Secrets et provisionnement QR

GenerateSecret retourne un secret Base32 aléatoire de SecretLength octets (20 par défaut). GetProvisioningURI construit l'URI otpauth://totp/ avec Issuer, Algorithm, Digits et Period, prêt à être affiché comme code QR.

Tolérance au décalage d'horloge

VerifyCode accepte le pas de temps courant et Window pas avant ou après (1 par défaut), donc un téléphone dont l'horloge est décalée de quelques secondes se connecte quand même.

Protection anti-rejeu

La surcharge de VerifyCode avec aLastTimeStep n'accepte qu'un pas de temps supérieur au dernier utilisé et retourne le pas correspondant, donc un code ne peut jamais être utilisé deux fois.

Compteurs HOTP

GenerateHOTP et VerifyHOTP implémentent la variante basée sur un compteur pour les tokens matériels, avec une fenêtre d'anticipation qui resynchronise le compteur en cas de succès.

Codes de récupération

GenerateRecoveryCodes remplit n'importe quel TStrings avec des codes uniques à usage unique, la solution de secours quand l'utilisateur perd l'appareil avec son application authenticator.

Algorithmes et chiffres

HMAC-SHA1 (le défaut pris en charge par toutes les applications), HMAC-SHA256 ou HMAC-SHA512 via Algorithm, des codes de 6 à 8 Digits et n'importe quel Period.

Spécifications et références

Sources faisant autorité pour les standards implémentés par ce composant.

Documentation et démos

Accès direct à la référence du composant, récupère le projet de démo prêt à l'emploi et télécharge l'essai.

Aide en ligne : TsgcTOTPAuthenticator Référence complète des propriétés et méthodes de ce composant.
Projet de démo : Demos\26.Authentication\02.TOTP Inscription avec un code QR, codes en temps réel, vérification avec protection anti-rejeu et codes de récupération. Livré dans le paquet sgcWebSockets, télécharge l'essai ci-dessous.
Document technique (PDF) Fonctionnalités, démarrage rapide, exemples de code pour Delphi et C++ Builder et références aux sources primaires pour ce composant uniquement.
Manuel utilisateur (PDF) Manuel complet couvrant tous les composants de la bibliothèque.
Blog : Connexion Delphi avec Passkeys, SSO SAML, LDAP et TOTP 2FA Comment les six composants d'authentification s'articulent dans une seule application Delphi.
Meilleur rapport qualité-prix : All-AccessTous les produits eSeGeCe, Support Premium inclus, à partir de €1,059/an.
Voir les tarifs All-Access

Prêt à ajouter l'authentification à deux facteurs ?

Télécharge l'essai gratuit et protège les connexions Delphi avec les codes d'une application authenticator.