TOTP em Delphi: Autenticação de Dois Fatores

Adicione um segundo fator a qualquer login com os códigos de seis dígitos do Google Authenticator, Microsoft Authenticator ou Authy. Crie o segredo, mostre-o como QR Code e verifique os códigos no seu servidor.

TsgcTOTPAuthenticator

Um componente não visual que implementa senhas de uso único baseadas em tempo (RFC 6238) e em contador (RFC 4226). Ele nunca abre uma conexão, então funciona tanto em um formulário de login quanto em uma API REST ou em um servidor WebSocket.

Classe do componente

TsgcTOTPAuthenticator (unit sgcAuth_TOTP)

Plataformas

Windows, macOS, Linux, iOS, Android

Edição

Enterprise e All-Access, além do pacote sgcAuth. Também disponível no sgcWebSockets .NET.

Cadastre o usuário e depois verifique os códigos

Chame GenerateSecret uma vez por usuário, mostre GetProvisioningURI como QR Code, armazene o segredo, e confira todo código digitado no login com VerifyCode.

uses
  sgcAuth_TOTP;

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

  // cadastro: um novo segredo Base32 e o URI otpauth:// para o QR Code
  vSecret := TOTP.GenerateSecret;
  vURI := TOTP.GetProvisioningURI('alice@example.com', vSecret);
  // salve vSecret junto ao registro do usuário, renderize vURI como QR Code

  // login: confira o código digitado pelo usuário
  if TOTP.VerifyCode(vSecret, edtCode.Text) then
    ShowMessage('Code accepted');

  // códigos de recuperação de uso único para um telefone perdido
  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);

O que está incluído

Tudo o que um segundo fator precisa, do primeiro QR Code à recuperação de um dispositivo perdido. O armazenamento dos segredos continua nas suas mãos.

Segredos e provisionamento por QR

GenerateSecret retorna um segredo Base32 aleatório de SecretLength bytes (20 por padrão). GetProvisioningURI constrói o URI otpauth://totp/ com Issuer, Algorithm, Digits e Period, pronto para renderizar como QR Code.

Tolerância à deriva do relógio

VerifyCode aceita o intervalo de tempo atual e Window intervalos antes ou depois dele (1 por padrão), para que um telefone com o relógio alguns segundos atrasado ainda consiga logar.

Proteção contra repetição

A sobrecarga de VerifyCode com aLastTimeStep aceita apenas um intervalo de tempo maior que o último usado e retorna o intervalo correspondente, para que um código nunca possa ser usado duas vezes.

Contadores HOTP

GenerateHOTP e VerifyHOTP implementam a variante baseada em contador para tokens de hardware, com uma janela de antecipação que ressincroniza o contador em caso de sucesso.

Códigos de recuperação

GenerateRecoveryCodes preenche qualquer TStrings com códigos únicos de uso único, o recurso de contingência para quando o usuário perde o dispositivo com o aplicativo autenticador.

Algoritmos e dígitos

HMAC-SHA1 (o padrão suportado por todo aplicativo), HMAC-SHA256 ou HMAC-SHA512 através de Algorithm, códigos de 6 a 8 Digits e qualquer Period.

Especificações & referências

Fontes oficiais dos padrões implementados por este componente.

Documentação & Demos

Acesse a referência do componente, obtenha o projeto de demo pronto para executar e baixe o trial.

Ajuda Online — TsgcTOTPAuthenticator Referência completa de propriedades e métodos deste componente.
Projeto de Demo — Demos\26.Authentication\02.TOTP Cadastro com QR Code, códigos ao vivo, verificação com proteção contra repetição e códigos de recuperação. Incluído no pacote sgcWebSockets — baixe o trial abaixo.
Documento Técnico (PDF) Recursos, quick start, exemplos de código para Delphi & C++ Builder e referências primárias — somente este componente.
Manual do Usuário (PDF) Manual abrangente cobrindo todos os componentes da biblioteca.
Blog: Login em Delphi com Passkeys, SAML SSO, LDAP e TOTP 2FA Como os seis componentes de autenticação se encaixam em uma única aplicação Delphi.
Melhor custo-benefício: All-AccessTodos os produtos da eSeGeCe, com Suporte Premium incluído, a partir de €1,059/ano.
Ver preços do All-Access

Pronto para Adicionar Autenticação de Dois Fatores?

Baixe o trial gratuito e proteja seus logins em Delphi com códigos de aplicativo autenticador.