Delphi TOTP 双因素身份验证

使用 Google Authenticator、Microsoft Authenticator 或 Authy 生成的六位验证码,为任意登录流程添加第二身份因素。创建密钥、以二维码形式展示,并在服务器上验证输入的验证码。

TsgcTOTPAuthenticator

一个非可视化组件,实现了基于时间(RFC 6238)和基于计数器(RFC 4226)的一次性密码。它从不建立连接,因此可以同样用于登录表单、REST API 或 WebSocket 服务器。

组件类

TsgcTOTPAuthenticator(单元 sgcAuth_TOTP

平台

Windows, macOS, Linux, iOS, Android

版本

Enterprise 和 All-Access,以及 sgcAuth 软件包。sgcWebSockets .NET 中同样提供。

为用户开通,再验证验证码

每个用户调用一次 GenerateSecret,将 GetProvisioningURI 显示为二维码,保存密钥,并使用 VerifyCode 检查登录时输入的每个验证码。

uses
  sgcAuth_TOTP;

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

  // 开通阶段:生成新的 Base32 密钥和用于二维码的 otpauth:// URI
  vSecret := TOTP.GenerateSecret;
  vURI := TOTP.GetProvisioningURI('alice@example.com', vSecret);
  // 将 vSecret 与用户记录一起保存,将 vURI 渲染为二维码

  // 登录时:检查用户输入的验证码
  if TOTP.VerifyCode(vSecret, edtCode.Text) then
    ShowMessage('Code accepted');

  // 手机丢失时使用的一次性恢复码
  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);

内部功能

从第一个二维码到丢失设备后的恢复,第二身份因素所需的一切都已具备。密钥的存储方式始终由您掌控。

密钥与二维码配置

GenerateSecret 返回一个长度为 SecretLength 字节(默认 20)的随机 Base32 密钥。GetProvisioningURI 使用 IssuerAlgorithmDigitsPeriod 构建 otpauth://totp/ URI,可直接渲染为二维码。

时钟偏移容忍

VerifyCode 会接受当前时间步长前后 Window 个时间步长(默认 1)内的验证码,因此即使手机时钟存在几秒钟的偏差,用户依然可以登录。

防重放保护

aLastTimeStep 参数的 VerifyCode 重载只接受大于上一次所用时间步长的验证码,并返回匹配到的步长,因此同一个验证码永远不能被使用两次。

HOTP 计数器

GenerateHOTPVerifyHOTP 为硬件令牌实现了基于计数器的变体,并提供前瞻窗口,在验证成功后重新同步计数器。

恢复码

GenerateRecoveryCodes 向任意 TStrings 填充唯一的一次性验证码,作为用户丢失身份验证器应用所在设备时的后备方案。

算法与位数

通过 Algorithm 选择 HMAC-SHA1(每款应用都支持的默认算法)、HMAC-SHA256 或 HMAC-SHA512,验证码位数 Digits 可设为 6 到 8 位,Period 也可自定义。

规范与参考

本组件所实现标准的权威来源。

文档与演示

直达组件参考,获取可立即运行的演示项目,并下载试用版。

在线帮助:TsgcTOTPAuthenticator 本组件的完整属性和方法参考。
演示项目:Demos\26.Authentication\02.TOTP 通过二维码开通、实时验证码、带防重放保护的验证以及恢复码。随 sgcWebSockets 包一起提供,请从下方下载试用版。
技术文档 (PDF) 仅涵盖本组件的功能、快速入门、Delphi 和 C++ Builder 代码示例及主要参考来源。
用户手册 (PDF) 涵盖库中每个组件的综合手册。
博客:使用通行密钥、SAML SSO、LDAP 和 TOTP 2FA 登录 Delphi 六个身份验证组件如何在一个 Delphi 应用中协同工作。
超值之选:All-AccesseSeGeCe 全部产品,含高级支持,每年 €1,059 起。
查看 All-Access 价格

准备好添加双因素身份验证了吗?

下载免费试用版,使用身份验证器应用的验证码保护您的 Delphi 登录。