Asp.Net Identity 2.0 认证
转Asp.Net Identity 2.0 认证
一个星期前,也就是3月20日,微软发布了Asp.Net Identity 2.0 RTM。功能更加强大,也更加稳定。Identity这个东西现在版本还比较低,每次发布新版本都会有较多改动。
2.0新增了很多功能,比如
- “双重认证(TFA)" --就是类似密保登陆的功能
- ”账号锁定”--可以设置账号在短时间内登陆失败达到一定次数则在几分钟内被禁止登陆
- “账号认证”--即现在普遍的登陆模式,用户名即邮箱,注册后需要认证才可以登陆
- “密码找回”--这个常用功能以前一直未被集成到Identity中
- “单点登出(SSO)”--也就是同时打开了几个页面,在任何页面退出,都会导致其他页面的TOKEN失效,从而不能进行账户下的操作
- “主键变更”--在1.0版本中用户表的主键是string类型的用户名,现在可以设置任意类型的主键,如int,Guid 等
- “集合查询”-- 支持以集合的方式查询Users和Roles表
- “删除账号”--现在这个功能可以使用UserManager管理类来实现,过去只能通过dbContext直接操作数据表是很麻烦的
- “增强密码规则”--在注册时,可以设置密码规则,包括位数,是否必须大写字母,是否必须小写字母,是否必须数字,是否必须特殊符号等,规则更加强大
其他更多功能请参考官方博客http://blogs.msdn.com/b/webdev/archive/2014/03/20/test-announcing-rtm-of-asp-net-identity-2-0-0.aspx
========================================================================================
当然,上面的功能具体如何实现还需要我们来编写具体的代码,比如实现第三方登陆等,Identity只是给出了基本的脚手架。
下面我基于Identity 2.0新的脚手架来实现他的 注册账号认证 功能,即使用邮箱注册后,系统发送邮件至用户邮箱,用户打开邮箱点击超链接激活账号后才可以登陆。
首先,拿到新东西当然是看文档,然后下载Sample看下基本功能是如何实现的。
官方给出的Sample的安装方法,使用VS 打开菜单 “工具”--》“NuGet程序包管理器"--》”程序包管理器控制台“,打开后输出”Install-Package Microsoft.AspNet.Identity.Samples -Version 2.0.0-beta2 –Pre“ 。然后程序会自动为你安装Sample程序,期间假如你的其他nuget包版本过低,或有重复的文件,会提示你更新等,你可能需要输入Y并按回车。另外需要注意的是:这个SAMPLE包需要安装在一个Empty的MVC项目中。
2.0的脚手架内容和组织架构比以前更复杂,基本的内容您可以查看样板程序,此处不再赘述。下面仅讲解实现邮箱认证功能需要进行的改动。
提示:此示例需要您对Identity有基本的了解,并配合Identity 2.0的Sample Code阅读效果更佳。
========================================================================================
1.配置smtp服务
要发送邮件给注册用户,首先我们需要有个发件邮箱,这里可以随便弄个QQ邮箱之类的。配置的内容可以直接写死在代码里,但为了方便配置,我们把它写到Web.Config中,
Web.Config
上面的代码中,为了自定义配置节点,需要在configSections节点中,声明我们自定义的节点,这里我们自定义了一组节点叫application。然后我们就可以在下文中详细配置application节点组,其中的mail节点就是和smtp相关的邮箱配置。其中最主要的属性就是smtp服务器地址,端口号(一般默认25),和你的邮箱账号和密码。其他内容可以根据你的需要的策略自行配置。
配置写好了,在程序中要使用时,只需读出其中的数据即可。我们需要将配置读到一个模型中,因此新建一个"Configurations"文件夹,并新建一个"MailConfig"类让它继承ConfigurationSection类,代码如下。
MailConfig
在使用时,只需要MailConfig config = (MailConfig)ConfigurationManager.GetSection("application/mail"); 即可读取到配置属性,更详细的内容可以在ConfigurtaionSection上按F1参考MSDN。
2.配置UserManager
在项目脚手架中,App_Start文件夹下有个IdentityConfig.cs文件,打开他,其中有一个继承了UserManager<ApplicationUser>的ApplicationUserManage类。(如果你没有变更文件结构的话,当然你可以根据需求自行调整整个文件组织结构)。
在ApplicationUserManager中可以配置的东西很多,比如账号锁定规则,密码强度规则,密保登陆等。其中还有一句manager.EmailService = new EmailService();, 而这个EmailService类就在本文件中,他继承了IIdentityMessageService接口,这个接口总共只有一个方法SendAsync,也就是发送邮件,我们只需要在这个方法中实现发送邮件的逻辑,在需要发送邮件时UserManager会自动调用该方法。
MailService
上面这段代码简单的实现了邮件发送逻辑,当然也可以有更复杂的策略,比如是否使用SSL连接等此处我并未配置。关于电子邮件的相关知识可以参考:http://systemnetmail.com/
代码写到这里,运行程序,尝试注册新用户,如果邮箱配置没有问题的话,新用户应该已经可以收到系统发来的邮件了。不过现在即使未验证邮箱也可以登陆,需要自己实现未验证邮箱禁止登陆的功能。
3.变更Login策略
首先说一下,在注册功能中,为了方便测试,注册后跳转的页面直接提供了激活邮箱的连接,正式运行的话需要把它删除,我们只需要把该连接发送到用户邮箱即可。
在登陆时,统一调用的是SingInHelper中的PasswordSignIn方法,然后返回枚举类型的SignInStatus,来决定将哪个页面返回给用户。现在SignInStatus中并没有邮箱未验证禁止登陆的状态。因此我们要在其中加一个,比如叫”InvalidEmail"。如果返回的是SignInStatus.InvalidEmail,则让用户跳转到提示邮箱未激活的界面。也就是在Login方法中的switch语句中加一个case,如下图
Login
这里,我直接跳转到DisplayEmail页面,提示用户未激活邮箱,禁止登陆,并询问他是否需要再次发送验证邮件。当然这个页面我自己做了需要的修改。
然后我们需要在PasswordSignIn方法中也加入相应的策略以使它能够返回InvalidEmail状态值。
PasswordSignIn
在上面的代码中,未加邮箱验证前,用户登录后的逻辑顺序,1.判断是否存在该账号,2.判断该账号是否锁定,3.检测账号密码是否正确(若正确直接登陆,否则失败次数+1),4(若走到这一步则说明账号密码错误)检测是否需要锁定账号,5返回登陆失败。根据上面的逻辑,我们应该把邮箱验证加到2和3之间,也就是如上图代码中调用UserManager的IsEmailConfirmedAsync方法,来验证用户邮箱是否认证。
至此,整个功能应该已经全部实现了。
================================================================================
此文是在我已经实现后第二天所写,若步骤有遗漏或错误,欢迎指正补充
Asp.Net Identity 2.0 认证的更多相关文章
- 使用Asp.Net Identity 2.0 认证邮箱激活账号(附DEMO)
注:本文系作者原创,但可随意转载.若有任何疑问或错误,欢迎与原作者交流,原文地址:http://www.cnblogs.com/lyosaki88/p/aspnet-itentity-ii-email ...
- asp.net identity 3.0.0 在MVC下的基本使用 序言
本人也尚在学习使用之中,错误之处请大家指正. 开发环境:vs2015 UP1 项目环境:asp.net 4.6.1 模板为:asp.net 5 模板 identity版本为:asp.n ...
- MVC使用ASP.NET Identity 2.0实现用户身份安全相关功能,比如通过短信或邮件发送安全码,账户锁定等
本文体验在MVC中使用ASP.NET Identity 2.0,体验与用户身份安全有关的功能: →install-package Microsoft.AspNet.Identity.Samples - ...
- ASP.NET Identity 3.0教程
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:我相信有些人和我一样,已经开始把ASP.NET 5用于产品开发了.不过现在最大的问题是 ...
- Asp.net Identity 2.0 作弊条
Moving ASP.NET Identity model to class library http://stackoverflow.com/questions/23446919/moving-as ...
- ASP.net core 2.0.0 中 asp.net identity 2.0.0 的基本使用(一)—修改数据库连接
开发环境:vs2017 版本:15.3.5 项目环境:.net framework 4.6.1 模板asp.net core 2.0 Web应用程序(模型视图控制器) 身份验证:个人用户账号 ...
- asp.net identity 3.0.0 在MVC下的基本使用(一)
注册时信箱转为用户名. 本人习惯使用用户名做注册用户,因为不管是什么终端起码都能少输入几个字符,可以提高用户体验. 这里需要更改控制器,模型和视图 1.打开Controllers目录下的Account ...
- ASP.net core 2.0.0 中 asp.net identity 2.0.0 的基本使用(四)—用户注册
修改用户注册 1.修改用户名注册规则. 打开Controllers目录下的AccountController.cs. 在控制器中找到 public async Task<IActionResul ...
- ASP.net core 2.0.0 中 asp.net identity 2.0.0 的基本使用(三)—用户账户及cookie配置
修改用户账户及cookie配置 一.修改密码强度和用户邮箱验证规则: 打开Startup.cs,找到public void ConfigureServices(IServiceCollection s ...
随机推荐
- 安卓开发笔记——探索EventBus(转)
1.关于EventBus: 组件通讯在Android开发中是不可避免的,随着业务需求的复杂化,代码中需要我们去处理的业务逻辑难度也不断增大.例如多个Fragment之间的数据传递,Service与Ac ...
- java一般使用基础
1.这是一个通用 仿制药javaA型安全机制来保护. 它是通过变量的类型,如果,实现变量类型限制,从而保证了程序编译变量类型的安全性在一定程度上.反之.如果没有泛型,这些只存在于程序,如果猿的大脑,这 ...
- .NET缓存框架CacheManager---1、CacheManager的介绍
在我们开发的很多分布式项目里面(如基于WCF服务.Web API服务方式),由于数据提供涉及到数据库的相关操作,如果客户端的并发数量超过一定的数量,那么数据库的请求处理则以爆发式增长,如果数据库服务器 ...
- Effective C++ 7
7.预先准备足够的内存情况. new当内存分配请求无法完成,它会抛出一个异常,怎么办异常,这是一个非常现实的,绝对必要的所遇到的问题后. 于c一般使用宏来分配内存和测试分发成功.c++中产阶级似下面的 ...
- 140724夏训.txt
1.同余定理 (a+b)%c==(a%c+b%c)%c (a*b)%c==[(a%c)*(b%c)]%c 由于有的数在int范围内,可是两个的乘积却超过了int范围,这样 ...
- Middleware详解
Middleware详解 在第1章项目结构分析中,我们提到Startup.cs作为整个程序的入口点,等同于传统的Global.asax文件,即:用于初始化系统级的信息(例如,MVC中的路由配置).本章 ...
- Tair LDB基于Prefixkey找到如何提取一系列性能优化项目key的prefix_size
眼下项目已快截止,编码任务也基本完毕.如今主要是性能測试. 项目是依照"Tair LDB基于Prefixkey的范围查找性能优化项目提议方案"的步骤一步步完毕的,首先先介绍第一个关 ...
- 安装 CocoaPods & Alcatraz
(一)安装CocoaPods { CocoaPods :} 当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等.可能某个类库又用到其他类库,所以要使 ...
- Flex在使用无线电的button切换直方图横坐标和叙述性说明
1.问题叙述性说明 一组单选button,有周和月之分,选择"周",柱状图横坐标显示的是周,纵坐标显示的是人数:选择"月",柱状图横坐标显示的月,纵坐标显示的是 ...
- 解决Uploadify上传控件加载导致的GET 404 Not Found问题
今天在项目发用到Uploadify上传, 发现在打开页面时会有一多余的请求,由于路由没有设置这个,导致404错误,能搜索查到以下解决的方法 <Uploadify v3 bug. Unecessa ...