首页 > 代码库 > ASP.NET Identity

ASP.NET Identity

ASP.NET身份验证方式

Windwos身份验证:一般用于局域网应用。使用windows验证时,用户的windows安全令牌在用户访问整个网站期间使用HTTP请求进行消息发送。应用程序在本地(或者域)范围内通过安全令牌来验证账号的有效性,并评估用户所在角色所具备的权限。当用户验证失效或者未授权时,要求用户提供安全凭证。

Forms验证:在Windows身份验证机制下,一旦有超出本地域控制器范围的外网用户访问网站,就会出现问题。使用Forms验证,ASP.NET需要验证加密的HTTP cookie或者查询字符串来识别用户的所有请求。cookie与ASP.NET会话机制(session)的关系密切,在会话超时或者用户关闭浏览器之后,会话和cookie就会失效,用户需要重新登录网站建立新的会话。

Forms验证流程

1、用户输入账号及密码。

2、指定验证策略检查用户是否有效。

3、验证通过,则在客户端生成一个cookie文件。cookie文件标识用户已经验证通过,当你访问网站其他资源时,不需要重新验证。

ASP.NET Membership

使用Forms认证能解决基本的身份验证问题。但是,大部分应用程序还包含角色和用户管理以及权限信息的存储问题。还需要做如下工作:

  • 创建用户和角色表
  • 编写访问数据表的代码
  • 提供用户和密码的验证策略

几乎每一个应用程序,都有这些需求。针对这些需求,微软提供了Membership方案,ASP.NET Membership满足了web应用程序在成员资格方面的常见需求,这些需求包括Forms身份验证,存储用户名、密码和用户资料(profile)等。

Membership简化了应用程序的编写,然而,随着需求的迭代变更,ASP.NET Membership也体现出了乏力:

  • 数据库架构受限于SQL Server
  • 生硬的表存储结构。
  • 系统依赖关系数据库。
  • 不能使用OWIN。(由于登录、注销功能基于表单认证,第三方账号的接入显的比较困难。)

OWIN(Open Web Interface for .NET)

OWIN是一种定义Web服务器和应用程序组件之间的交互规范。这一规范的目的是为了发展.NET相关的Web服务器和应用程序组件生态系统。

更多信息参考 http://owin.org/

ASP.NET Identity

ASP.NET Identity作为微软提供的安全框架,具有以下优势:

统一的框架

可以轻松整合到ASP.NET各种框架以及程序上。例如,ASP.NET MVC,Web Froms,Web Pages,Web API和SignalR等。

自定义用户信息

方便的扩展用户信息。如:添加用户的生日、年龄等。

灵活的角色管理

ASP.NET Identity中的角色提供程序可以基于角色来限制对应用程序某个部分的访问。

数据持久性及兼容性

默认情况下,ASP.NET Identity系统将所有的数据存储在SQL Server数据库中,并且使用Entity Framework Coder First实现数据库的管理。

单元测试能力

ASP.NET Identity提供了完善的单元测试机制。

OWIN集成

ASP.NET验证(Authentication)基于OWIN中间件,可以在任何OWIN的宿主上使用。ASP.NET Identity不依赖于System.Web,完全兼容OWIN框架,可以被用在任何由OWIN承载的应用程序。

NuGet包

ASP.NET Identity作为一个NuGet包进行发布,并且作为VS中各个Web项目模板的一部分提供。可以直接从NuGet库中下载。

这种发布方式使得ASP.NET团队进行更好的进行开发工作。

ASP.NET Identity组成部分

ASP.NET Identity主要包括核心功能模块、EntityFramework模块以及OWIN模块。具体如下:

Microsoft.AspNet.Identity.Core

核心库,包含Identity的主要功能。

Microsoft.AspNet.Identity.EntityFramework

主要包括Ef部分的实现。

Microsoft.AspNet.Identity.OWIN

对OWIN的支持。

ASP.NET Identity