使用ASP.NET Identity以手机短信实现双重验证创建一个ASP.NET 5项目运行应用程序使用SMS短信进行双重验证开启双重验证使用双重验证登陆应用程序禁用账户来防止暴力破解

这篇文章将展示怎么使用SMS短信启动双重验证

创建一个ASP.NET 5项目

一开始,使用Visual studio 2015创建一个新的ASP.NET Web应用程序:

在下一步中选择ASP.NET 5 Templates中的Website项目模板,并在右侧面板中确认选择了Individual Authentication:

到这里,项目已经创建,这可能需要几分钟来加载,注意在Visual studio状态栏中指示正在下载的一些资源,Visual studio下载了一些它认为需要的文件作为应用程序解决方案的一部分。

运行应用程序

在项目加载结束后,运行这个应用程序,你将看到以下页面:

使用SMS短信进行双重验证

本教程使用Twilio,但是你也可以使用其他任何的SMS技术提供商。

  1. 创建Twilio账号
  2. 从”Account“选项卡,拷贝账户的SID和Auth token
  3. 从”Numbers“选项卡页面中,拷贝你Twilio电话号码
  4. 确保以上两项在你的应用程序中可用
  5. 在应用程序中添加Twilio的Nuget包
  6. 在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>
            @: &nbsp;|&nbsp;
            <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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大内老A

如何解决HP QC(Quality Center)在Windows 7下不能工作的问题

HP QC(Quantity Center)是一款不错的测试管理工具,最近把公司的操作系统从Windows XP升级到Windows 7之后,发现登录到QC S...

1926
来自专栏张善友的专栏

Sqlite介绍

1、SQLite简介 SQLite第一个Alpha版本诞生于2000年5月. 至今已经有4个年头了. 而在今年的5月SQLite也迎来了一个新的里程: SQL...

1949
来自专栏游戏杂谈

禁用iOS的UIView长按默认操作

很多时候需要禁用移动设备的默认行为,比如长按一个a链接的按钮(href写的是javascript:;)会提示是否打开/取消。而-webkit-touch-cal...

182
来自专栏听雨堂

【5】基于Log4Net的日志系统

阅读目录 日志系统应具备的特性 Log4Net 配置文件:log4net.config 初始化 输出信息 对Log4Net的封装 log4net.c...

2036
来自专栏大内老A

.NET Core跨平台的奥秘[中篇]:复用之殇

在《.NET Core跨平台的奥秘[上篇]:历史的枷锁》中我们谈到:由于.NET是建立在CLI这一标准的规范之上,所以它天生就具有了“跨平台”的基因。在微软发布...

2048
来自专栏韩东吉的Unity杂货铺

零基础入门 6: 菜单介绍

每个月总要忙那么一段时间,因为之前的存稿保持在日更,导致后续忙起来没有时间来得及写新的内容,就一直没有更新。今天趁着午休来更新一篇。主要说下Unity里复杂的菜...

992
来自专栏Django中文社区

使用 Django Pagination 实现简单的分页功能

当网页上显示的数据过多时,通常需要进行分页显示。Django 内置的 Pagination 能够帮助我们实现简单的分页功能。 Paginator 类的常用方法 ...

2799
来自专栏技术博文

redis配置详解

##redis配置详解 # Redis configuration file example. # # Note that in order to read ...

2575
来自专栏walterlv - 吕毅的博客

在操作系统重启后恢复应用程序的工作状态

发布于 2018-01-21 13:29 更新于 2018-09...

551
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统-关于WebApi的用法

我们新建的WebApi集成了微软自带的HelpPage,即Api的文档,在我们编写好接口之后会自动生成一份文档

990

扫码关注云+社区