Delphi TOTP 双因素身份验证
使用 Google Authenticator、Microsoft Authenticator 或 Authy 生成的六位验证码,为任意登录流程添加第二身份因素。创建密钥、以二维码形式展示,并在服务器上验证输入的验证码。
使用 Google Authenticator、Microsoft Authenticator 或 Authy 生成的六位验证码,为任意登录流程添加第二身份因素。创建密钥、以二维码形式展示,并在服务器上验证输入的验证码。
一个非可视化组件,实现了基于时间(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 使用 Issuer、Algorithm、Digits 和 Period 构建 otpauth://totp/ URI,可直接渲染为二维码。
VerifyCode 会接受当前时间步长前后 Window 个时间步长(默认 1)内的验证码,因此即使手机时钟存在几秒钟的偏差,用户依然可以登录。
带 aLastTimeStep 参数的 VerifyCode 重载只接受大于上一次所用时间步长的验证码,并返回匹配到的步长,因此同一个验证码永远不能被使用两次。
GenerateHOTP 和 VerifyHOTP 为硬件令牌实现了基于计数器的变体,并提供前瞻窗口,在验证成功后重新同步计数器。
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 应用中协同工作。 | 打开 |