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. C# Azure 存储-分布式缓存Redis在session中的配置

    1. 开始 对于分布式的缓存,平常的session的处理是一个用户对应一台分布式的机器,如果这台机器中途挂机或者不能处理这个用户session的情况发生,则此用户的session会丢失,会发生不可预知 ...

  2. 前端编码规范之JavaScript

    上次浅谈了下关于CSS的编码规范,大部分童鞋持赞同意见,仍存在一些童鞋不太理解这些规范的意义. 如果是个人或者小作坊开发,其实这些所谓的编码规范也没啥意思,因为大家写好的代码直接就给扔到网上去了,很少 ...

  3. react native 入门实践

    上周末开始接触react native,版本为0.37,边学边看写了个demo,语法使用es6/7和jsx.准备分享一下这个过程.之前没有native开发和react的使用经验,不对之处烦请指出.希望 ...

  4. Android开发-之认识palette

    Android开发中,Google工程师已经给我们封装好了很多的按钮,使得我们在开发中非常的方便和便捷. 那么今天就来认识一下常用的按钮,那么在之前的课程中我已经详细讲过了Button按钮,那么这里就 ...

  5. 【Win 10 应用开发】RTM版的UAP项目解剖

    Windows 10 发布后,其实SDK也偷偷地在VS的自定义安装列表中出现了,今天开发人员中心也更新了下载.正式版的SDK在API结构上和以前预览的时候是一样的,只是版本变成10240罢了,所以大家 ...

  6. Android之TabActivity的使用

    TabActivity实现多页显示效果 由于手机屏幕有限,所以我们要尽量充分利用屏幕资源.在我们的应用程序中通常有多个Activity,而且会经常切换显示,这样我们就可以用TabActivity来显示 ...

  7. DOM-Element类型

    Element类型 Element类型用于表现XML或HTML元素,提供了对元素标签名.子节点及特性的访问.Element节点具有以下特征: nodeType的值为1 nodeName的值为元素的标签 ...

  8. Android APK签名

    一.为什么要签名? 开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样的名字,这时候如何区分?签名这时候就是起区分作用的. 由于开发商可能通过使用相同的Package Name来 ...

  9. 小菜学习Winform(七)系统托盘

    前言 有些程序在关闭或最小化的时候会隐藏在系统托盘中,双击或右击会重新显示,winform实现其功能很简单,这边就简单的介绍下. 实现 在winform实现托盘使用notifyIcon控件,如果加菜单 ...

  10. c# 我所理解的 值类型 and 引用类型

    一直以来对于值类型和引用类型都只是一个模糊的概念,趁最近有空深入理解了下. 先说说值类型,在msdn上是这样介绍值类型的. 意思就是值类型直接包含值. 变量引用的位置就是值所在内存中实际存储的位置,所 ...