asp.net identity 介绍
2016-07-28 16:14
597 查看
Asp.Net Identity 设计目标
微软在 asp.net 2.0 引入了 membership,为 asp.net 应用程序提供身份验证和授权功能。membership 假定用户在网站注册,然后凭用户名和密码登录网站。现在这个假定已经不成立了,web 上社交网络兴起,人们更倾向于使用社交网络登录网站。程序员的开发方式也产生了重大变化,单元测试现已成为开发中的主要关注点。membership 系统对社交网络登录和单元测试都不支持,已经不能适应现阶段的需求了。为此微软开发了 Asp.Net Identity,其目标是:统一的标识系统
可在 asp.net 下所有开发框架下使用,包括 ASP.NET MVC, Web Forms, Web Pages, Web API, and SignalR。
可用于构建 web, phone,store 或混合应用程序
易于扩展用户资料(User Profile)
程序员可以控制用户信息的架构。
持久化控制
默认情况下数据保存在关系数据库,使用实体框架 Code First 实现持久化机制。由于数据库架构由程序员控制,可以更改表名和主键数据类型。也可以更改数据存储方式,例如使用 SharePoint 或者 NoSQL 数据库。
这里是使用 NHibernate 代替实体框架实现持久化的项目,https://github.com/nhibernate/NHibernate.AspNet.Identity。
可进行单元测试
可以为用到 Asp.Net Identity 的代码编写单元测试。
角色提供程序
允许基于角色进行授权
基于声明的验证
用户的身份由一组声明(Claims)表示。声明对用户标识的表现力好过角色。用户和角色的关系只有“属于”和“不属于”,声明可以对用户进行更细致的描述。
社交账户登录提供程序
允许使用 facebook,twitter 等社交账号登录,同时在自己的应用程序中存储用户特定的数据。
Azure Active Directory
允许使用 Azure Active Directory 登录,同时在自己的应用程序中存储用户特定的数据。
OWIN 集成
ASP.NET 身份验证基于 OWIN 中间件。ASP.NET Identity 对 System.Web 没有依赖,是一个完全的 OWIN 框架。ASP.NET Identity 使用 OWIN 身份验证,通过 OWIN CookieAuthentication 而不是 FormsAuthentication 生成 cookie。
NuGet 程序包
通过 NuGet 程序包,ASP.NET 开发小组可以在新功能和 bug 修复上快速迭代,并及时向开发者发布。
相关程序包
Microsoft.AspNet.Identity.Core 包含 ASP.NET Identity 的核心接口Microsoft.AspNet.Identity.OWIN 包含将 ASP.NET Identity 接入到 OWIN 身份验证的功能,在需要调用 OWIN Cookie Authentication 生成 cookie 时使用
Microsoft.AspNet.Identity.EntityFramework 使用实体框架将用户数据保存到 SQL Server 数据库
Asp.Net MVC 中的相关代码
新建项目 mvc 项目时选择个人用户验证方式,项目模板会生成以下代码在 AccountController.Register 方法中使用 UserManager<TUser, TKey> 的 CreateAsync 方法注册用户:
// AccountController [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false); return RedirectToAction("Index", "Home"); } AddErrors(result); } return View(model); }
在 AccountController.Login 方法中使用 SignInManager<TUser, TKey> 的 PasswordSignInAsync 方法登录。
[HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { if (!ModelState.IsValid) { return View(model); } // 这不会计入到为执行帐户锁定而统计的登录失败次数中 // 若要在多次输入错误密码的情况下触发帐户锁定,请更改为 shouldLockout: true var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); switch (result) { case SignInStatus.Success: return RedirectToLocal(returnUrl); case SignInStatus.LockedOut: return View("Lockout"); case SignInStatus.RequiresVerification: return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe }); case SignInStatus.Failure: default: ModelState.AddModelError("", "无效的登录尝试。"); return View(model); } }
原文地址:http://www.asp.net/identity/overview/getting-started/introduction-to-aspnet-identity
相关文章推荐
- asp.net解决高并发的方案
- 如何做一个基于ASP.NET MVC 网站(六)
- 检测到在集成的托管管道模式下不适用的 ASP.NET 设置。
- springAOP之aspectJ(一)
- 如何做一个基于ASP.NET MVC 网站(五)
- ASP.NET 用MultiView和View实现选项卡效果
- asp.net C#中对Web.Config字符串加密与解密的方法
- ASP.NET MVC5验证系列之Remote Validation
- ASP下GridView中手动增加的按钮获取当前所在行的键值
- 使用 ssi 服务器端包含文件
- aspectjweaver.jar+ aopalliance.jar+mchange-commons-java.jar+cglib.jar官网下载
- IIS是如何处理ASP.NET请求的
- ASP.NET Core 介绍和项目解读
- asp.net实现md5加密
- 【无私分享:ASP.NET CORE 项目实战】EntityFramework下领域驱动设计的应用
- ASP.NET WEBAPI 的身份验证和授权
- 让Raspbian支持中文、禁用休眠
- asp.net限时发送手机验证码
- asp.net mvc实现简单的实时消息推送
- 转载 ASP.NET Web API 学习