使用ASP.NET Identity以手机短信实现双重验证
2015-09-01 21:16 小白哥哥 阅读(4626) 评论(4) 编辑 收藏 举报这篇文章将展示怎么使用SMS短信启动双重验证
创建一个ASP.NET 5项目
一开始,使用Visual studio 2015创建一个新的ASP.NET Web应用程序:
在下一步中选择ASP.NET 5 Templates中的Website项目模板,并在右侧面板中确认选择了Individual Authentication:
到这里,项目已经创建,这可能需要几分钟来加载,注意在Visual studio状态栏中指示正在下载的一些资源,Visual studio下载了一些它认为需要的文件作为应用程序解决方案的一部分。
运行应用程序
在项目加载结束后,运行这个应用程序,你将看到以下页面:
使用SMS短信进行双重验证
本教程使用Twilio,但是你也可以使用其他任何的SMS技术提供商。
- 创建Twilio账号
- 从”Account“选项卡,拷贝账户的SID和Auth token
- 从”Numbers“选项卡页面中,拷贝你Twilio电话号码
- 确保以上两项在你的应用程序中可用
- 在应用程序中添加Twilio的Nuget包
- 在MessageServices中添加代码来发送SMS短信
public static Task SendSmsAsync(string number, string message) { // Plug in your SMS service here to send a text message. var twilio = new TwilioRestClient("YourTwilioSid", "YourTwilioToken"); var result = twilio.SendMessage("YourTwilioPhoneNumber", number, message); return Task.FromResult(0); }
注意:在dnxcore50中Twilio不可用,因为twilio不包含这个版本的nuget包,如果你需要在这个版本中使用,可以使用Twilio的REST API
注意:不要直接把账户信息写到代码里,上文中这样做知识尽量保持代码简洁,实际操作中,你需要使用Secret Manager处理这些机密信息
开启双重验证
应用程序已经包含了可以双重验证的代码,下文中步骤展示如何打开它:、
1. 打开在Views/Manage目录下的Index.cshtml模板
2.取消注释的代码以让用户可以输入自己的电话号码:
<dt>Phone Number:</dt> <dd> @(Model.PhoneNumber ?? "None") [ @if (Model.PhoneNumber != null) { <a asp-controller="Manage" asp-action="AddPhoneNumber">Change</a> @: | <a asp-controller="Manage" asp-action="RemovePhoneNumber">Remove</a> } else { <a asp-controller="Manage" asp-action="AddPhoneNumber">Add</a> } ] </dd>
3. 取消注释下列代码,让用户可以打开或者关闭双重验证:
<dt>Two-Factor Authentication:</dt> <dd> @if (Model.TwoFactor) { <form asp-controller="Manage" asp-action="DisableTwoFactorAuthentication" method="post" class="form-horizontal" role="form"> <text> Enabled <input type="submit" value="Disable" class="btn btn-link" /> </text> </form> } else { <form asp-controller="Manage" asp-action="EnableTwoFactorAuthentication" method="post" class="form-horizontal" role="form"> <text> Disabled <input type="submit" value="Enable" class="btn btn-link" /> </text> </form> } </dd>
使用双重验证登陆应用程序
运行应用程序,来展示双重验证:
1. 为应用程序注册一个新的用户:
2. 在上部导航栏中,单击你的用户名邮件地址:
3. 添加电话号码:
4. 此时如果一切正常,你将收到一条来自上文中获取到的号码的短信:
5. 在页面中输入收到的验证码:
6. 提交页面,电话号码就将显示在用户信息页面中:
7. 点击Enable,开启双重验证:
8. 退出,并用这个用户名和密码重新登陆,验证用户名密码通过后,将跳转到一个让你选择验证方式的页面,如果你有其他双重验证方式,例如二维码或者Email,下拉列表中将会存在对应选项:
9. 最后点击提交,输入收到的验证码,登陆成功:
禁用账户来防止暴力破解
我们推荐你应用双重验证时使用账户禁用,一旦用户执行登录,每次失败的尝试将会被记录,一旦到达设置的错误次数(默认是五次),当前账户将会倍禁用5分钟,以下的配置将在用户登录失败十次后禁用账户10分钟:
services.Configure<IdentityOptions>(options => { options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(10); options.Lockout.MaxFailedAccessAttempts = 10; });