使用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 条评论
登录 后参与评论

相关文章

来自专栏大壮

mac 配置SSH

2286
来自专栏葡萄城控件技术团队

Asp.Net MVC4入门指南(10):第三方控件Studio for ASP.NET MVC4 工具应用

ComponentOne Studio for ASP.NET最新版本2013V1支持MVC4,其中包括: 新增 MVC 4 工程模板 (C# & VB) 开箱...

2129
来自专栏乐沙弥的世界

Vmware server 下为Oracle RAC 添加共享磁盘

    在VMware下的Oracle RAC 环境中,对于共享存储不够或者需要增加新的共享磁盘来配置ocr或votingdisk的多路镜像,我们可以通过vmw...

961
来自专栏Ryan Miao

git配置

安装完成git之后基本就可以使用了,但是,有些配置还是需要的。 在任何一个目录下,右键 Git Bash Here, 然后输入: 1.设置用户名和邮箱 $ gi...

3249
来自专栏蓝天

UNIX和Linux信号

1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和可靠信号的区...

1194
来自专栏张善友的专栏

Hammock for REST

  .NET 4 上的REST 框架 介绍了.NET/Mono 上几个RESTful方面的工具库,在Rest 客户端库之前介绍过了RestSharp《使用Res...

2257
来自专栏python3

openvpn windows客户端使用

下载这个OpenVPN目前需要 翻 墙 在Google中搜索官网的下载地址,百度现在搜索不到了,在Google Chrome中搜索OpenVPN:

1672
来自专栏葡萄城控件技术团队

.Net 高效开发之不可错过的实用工具 工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件,内

工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件,内存管...

1986
来自专栏林德熙的博客

dotnet core 通过修改文件头的方式隐藏控制台窗口

在带界面的 dotnet core 程序运行的时候就会出现一个控制台窗口,本文告诉大家使用最简单方法去隐藏控制台窗口。

721
来自专栏高性能服务器开发

windows完成端口(三)

系列目录 windows完成端口(一) windows完成端口(二) windows完成端口(三) windows完成端口(四) windows完成端口(五) ...

2734

扫码关注云+社区