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 identity 介绍的更多相关文章

  1. 微软的权限框架Asp.Net Identity

    Asp.Net Identity 深度解析 之 注册登录的扩展   关于权限每个系统都有自己的解决方案,今天我们来讨论一下微软的权限框架Asp.Net Identity ,介绍如下  http://w ...

  2. Asp.Net Identity 深度解析 之 注册登录的扩展

    关于权限每个系统都有自己的解决方案,今天我们来讨论一下微软的权限框架Asp.Net Identity ,介绍如下  http://www.asp.net/identity 这里不在赘余. 很多人认为 ...

  3. Asp.Net Identity cookie共享

    n the Startup.Auth.cs file, add the CookieDomain parameter with your domain: var cookieAuthenticatio ...

  4. asp.net core系列 46 Identity介绍

    一. Identity 介绍 ASP.NET Core Identity是一个会员系统,可为ASP.NET Core应用程序添加登录功能.可以使用SQL Server数据库配置身份以存储用户名,密码和 ...

  5. ASP.NET Identity V2简单介绍

    Microsoft.AspNet.Identity是微软在MVC 5.0中新引入的一种membership框架,和之前ASP.NET传统的membership以及WebPage所带来的SimpleMe ...

  6. 介绍 ASP.NET Identity - ASP.NET 应用程序的成员身份认证系统

    ASP.NET Identity 是构建 ASP.NET web 应用程序的一种新的身份认证系统.ASP.NET Identity 可以让您的应用程序拥有登录功能,并可以轻松地自定义登录用户的相关数据 ...

  7. MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN

    在Membership系列的最后一篇引入了ASP.NET Identity,看到大家对它还是挺感兴趣的,于是来一篇详解登录原理的文章.本文会涉及到Claims-based(基于声明)的认证,我们会详细 ...

  8. ASP.NET Identity入门系列教程(一) 初识Identity

    摘要 通过本文你将了解ASP.NET身份验证机制,表单认证的基本流程,ASP.NET Membership的一些弊端以及ASP.NET Identity的主要优势. 目录 身份验证(Authentic ...

  9. ASP.NET Core 介绍

    原文:Introduction to ASP.NET Core 作者:Daniel Roth.Rick Anderson.Shaun Luttin 翻译:江振宇(Kerry Jiang) 校对:许登洋 ...

随机推荐

  1. linux java so 历险

    一开始 -bash-4.1# java -cp "/usr/linkapp/bin/tomcat-master/webapps/ROOT/WEB-INF/lib/*":" ...

  2. GridView中数据的汇总方法

    首先,在页面添加事件<ASP:GridView OnRowDataBound="Gridview1_DataBound"> 其次,后台具体方法: public void ...

  3. Sql Server系列:字符串函数

    字符串函数用于对字符和二进制字符串进行各种操作,大多数字符串函数只能作用于char.nchar.varchar和nvarchar数据类型.字符串函数可以用在SELECT或者WHERE语句中. 1. A ...

  4. javascript技术难点(三)之this、new、apply和call详解

    4)    this.new.call和apply的相关问题 讲解this指针的原理是个很复杂的问题,如果我们从javascript里this的实现机制来说明this,很多朋友可能会越来越糊涂,因此本 ...

  5. 深入学习jQuery事件绑定

    × 目录 [1]bind [2]trigger [3]delegate[4]on[5]one 前面的话 javascript有HTML.DOM0级.DOM2级和IE这四种事件处理程序,而jQuery对 ...

  6. Neutron 架构 - 每天5分钟玩转 OpenStack(67)

    前面我们讨论了 Neutron 的基本概念,今天我们开始分析 Neutron 的架构. Neutron 架构 与 OpenStack 的其他服务的设计思路一样,Neutron 也是采用分布式架构,由多 ...

  7. Neutron 网络基本概念 - 每天5分钟玩转 OpenStack(66)

    上次我们讨论了 Neutron 提供的功能,今天我们学习 Neutron 模块几个重要的概念. Neutron 管理的网络资源包括 Network,subnet 和 port,下面依次介绍. netw ...

  8. scikit-learn K近邻法类库使用小结

    在K近邻法(KNN)原理小结这篇文章,我们讨论了KNN的原理和优缺点,这里我们就从实践出发,对scikit-learn 中KNN相关的类库使用做一个小结.主要关注于类库调参时的一个经验总结. 1. s ...

  9. 搭建GoldenGate的单向复制环境

    配置环境: 建议在相同版本OGG(即Oracle GoldenGate)之间进行复制,我在这里之所以选择不同版本的OGG,便于后续的比较学习. 一.准备OGG的运行用户 在这里,我直接使用oracle ...

  10. [Python] python vs cplusplus

    一些学习过程中的总结的两种语言的小对比,帮助理解OO programming. Continue... 字典 序列 --> 字典 Python: def get_counts(sequence) ...