使用ASP.NET Identity以手机短信实现双重验证
这篇文章将展示怎么使用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;
});
原文地址:http://docs.asp.net/en/latest/security/2fa.html
使用ASP.NET Identity以手机短信实现双重验证的更多相关文章
- SNF开发平台WinForm之十二-发送手机短信功能调用-金笛-SNF快速开发平台3.3-Spring.Net.Framework
1.调用前组装参数 2.调用发送信息服务脚本 .调用前组装参数: BaseSendTaskEntity entity = new BaseSendTaskEntity(); entity.Mess ...
- 利用java实现的一个发送手机短信的小例子
今天闲来无事,在微博上看到一个关于用java实现的一个发送手机短信的程序,看了看,写的不太相信,闲的没事,把他整理下来,以后可能用得着 JAVA发送手机短信,流传有几种方法:(1)使用webservi ...
- ASP.NET MVC+Bootstrap 实现短信验证
短信验证大家都已经非常熟悉了,基本上每天都在接触手机短信的验证码,比方某宝,某东购物.站点注冊,网上银行等等,都要验证我们的手机号码真实性.这样做有什么优点呢. 曾经咱们在做站点的时候.为了提高用户注 ...
- 循序渐进VUE+Element 前端应用开发(32)--- 手机短信动态码登陆处理
在一些系统中,有时候用户忘记密码,可以通过向自己手机发送动态验证码的方式实现系统登录功能.本篇随笔介绍如何结合后端ABP框架的短信发送和缓存模块的处理,实现手机短信动态码登陆处理. 一般的登录方式,分 ...
- Atitit. 破解 拦截 绕过 网站 手机 短信 验证码 方式 v2 attilax 总结
Atitit. 破解 拦截 绕过 网站 手机 短信 验证码 方式 v2 attilax 总结 1. 验证码的前世今生11.1. 第一代验证码 图片验证码11.2. 第二代验证码 用户操作 ,比如 ...
- C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 忘记密码功能改进、手机短信、电子邮件
由于我们的系统接近有100000个用户账户,经常会有忘记密码的时候,用户多了,很小的一个功能,每天都会有很多人在用,每个功能都非常友善,会提高提系统的效率,提高用户体验. 一天最多能返回3次手机短信, ...
- C#.NET 大型信息化系统集成快速开发平台 - 手机短信开发接口 4.0
可以批量发信息给手机,相同的信息发给多个手机号码的效果图 已发送手机短信列表 可以批量发手机的功能,可以把先有的待发信息列表,直接通过批量发送功能发出 这个是设置发送模板公式的功能展示,可以设置发送的 ...
- js手机短信按钮倒计时
/* 120秒手机短信按钮倒计时 */ exports.sendmessage = function (name) { var second = 120; $(name). ...
- C#简单实现发送手机短信
偶然想起,像编写一个从电脑向手机发送短信的程序,从网上查找到有三种方式:(1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册;(2) ...
随机推荐
- Ubunt16.04下安装PHP7+Nginx+MySQL
本文通过Ubuntu PPA来安装PHP7. 1.添加PPA $ sudo apt-get install python-software-properties software-properti ...
- Hadoop HBase概念学习系列之HBase里的时间戳(二十六)
HBase集群要求每个节点的时间必须同步.HBase对于节点的时间扭曲(time skew)容忍度很低(这和HDFS是不一样的). 这主要是因为HBase需要使用系统时间来产生时间戳.如果系统时间不同 ...
- ArcGIS Engine开发基础总结(一)
标准Engine功能 地图浏览 地图制作 数据查询 数据分析 及 所有的开发控件 —MapControl, PageLayout, Toolbar, TOC, ArcReader 对所有矢量和栅 ...
- 复用$.ajax方式传递参数错误处理
1.封装后的方法,在 data:inData 传递参数的方式和一般不一样,如果不注意会出现错误. function getDataByJsonP(methName, inData, fn) { $.a ...
- 【原创】python内存泄漏以及python flask框架莫名coredump
1.python内存泄漏 今天在看服务器上的进程时,用top查的时候,发现一个一直跑的脚本程序内存竟然达到了1.6G,这个脚本我有印象,一开始仅占用20M左右,显然是内存泄漏了. 用gc和objgra ...
- kafka 消费者和生产者测试类
pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www. ...
- Javascript (ECMAScript5) 的细节和违反直觉的地方
记录在学习Javascript (ECMAScript5) 中的一些与其他语言的不同之处,本文会不断更新. 里面的知识可能并不太适合有一定经验的Javascript程序员,仅仅但不限于给初学者阅读. ...
- 3192: [JLOI2013]删除物品
3192: [JLOI2013]删除物品 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1366 Solved: 794 [Submit][Statu ...
- Day2 CSS
什么是CSS 层叠样式表(cascading style sheet) 控制页面元素的显示方式.(添加样式) CSS语法 行间样式 行内式是在标记的style属性中设定CSS样式.这种方式没有体现出C ...
- 20145203盖泽双实验一 Java开发环境的熟悉(Linux + Eclipse)
实验一 Java开发环境的熟悉(Linux + Eclipse) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验要求 1.没 ...