使用 TOTP 实现多因素身份验证
使用 TOTP 实现多因素身份验证
要求
推荐
目录
创建共享密钥
将 TOTP 支持添加到您的应用程序的第一步是在服务器端生成共享密钥。该密钥是一个 Base32 编码的值,然后将提供给客户端。
在使用 TOTP 组件时,如果没有指定 Secret,则在调用 CreatePassword 时会自动生成一个。或者,可以通过其他方式生成 Base32 值,并将其提供给组件的 Secret
属性。
使用 TOTP 创建随机密钥
Totp totp = new Totp();
totp.CreatePassword();
Console.WriteLine(totp.Secret);
这将输出一个 Base32 值,客户端将使用该值生成身份验证代码,服务器端将使用该值验证代码。例如
5HCWXIP2MJNSUBGYVUZFLRB2HWIGXR4SYJQXNBQ=
将共享密钥提供给客户端
创建 Base32 共享密钥后,必须将其提供给客户端。这可以通过任何方式完成,例如简单地将 Base32 值显示给客户端。提供此数据的另一种常见方法是通过 QR 码。像 Google Authenticator 这样的应用程序可以扫描此 QR 码并自动配置所需的值,从而提供无缝的用户体验。
在本文中,ComponentOne BarCode for WinForms 组件用于生成 QR 码。在 ASP.NET WebSite 项目中,将 C1QRCode
组件从工具箱拖到设计视图中的 Web 表单以创建实例。然后在代码中,使用标准的 QR URI 格式 otpauth://TYPE/LABEL?PARAMETERS
设置 QR 码的输入文本。例如
string sharedSecret = "5HCWXIP2MJNSUBGYVUZFLRB2HWIGXR4SYJQXNBQ=";
C1QRCode1.Text = "otpauth://totp/MyUserId?secret=" + sharedSecret;
运行时,客户端应该在浏览器中看到 QR 码(您可以扫描这个!)。
接下来,客户端必须使用它开始生成代码。
客户端导入共享密钥并生成代码
客户端必须导入共享密钥才能开始生成代码。这可以通过使用可以扫描 QR 码的应用程序(如上述 Google Authenticator)来完成,或者通过直接导入密钥来完成。
使用应用程序
使用 Google Authenticator 扫描上面的 QR 图像将自动导入密钥和帐户标签,并开始生成代码。例如
使用代码
或者,客户端可以使用 TOTP 组件使用共享密钥直接生成身份验证代码。例如
string sharedSecret = "5HCWXIP2MJNSUBGYVUZFLRB2HWIGXR4SYJQXNBQ=";
Totp totp = new Totp();
totp.Secret = sharedSecret;
totp.CreatePassword();
Console.WriteLine("Authentication Code: " + totp.Password);
然后,客户端会将代码提供给服务器端。
验证设备
要使用 TOTP 组件验证生成代码的设备,只需设置密钥、提供的代码,然后调用 ValidatePassword
。例如
string sharedSecret = "5HCWXIP2MJNSUBGYVUZFLRB2HWIGXR4SYJQXNBQ=";
Totp totp = new Totp();
totp.Secret = sharedSecret;
totp.Password = "215271";
if (totp.ValidatePassword())
Console.WriteLine("Code is validated!");
else
Console.WriteLine("Code is not validated.");
我们感谢您的反馈。如果您对本文有任何问题、意见或建议,请通过 kb@nsoftware.com 联系我们的支持团队。