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

摘要

经过本文你将了解ASP.NET身份验证机制,表单认证的基本流程,ASP.NET Membership的一些弊端以及ASP.NET Identity的主要优点。数据库

目录

 

身份验证(Authentication)和受权(Authorization)

咱们先来思考一个问题:如何构建安全的WEB应用?浏览器

一直以来,这都是比较热门的话题。不幸的是,目前尚未一种万能方法,来保证您的WEB应用是绝对安全的。不论是系统自己的漏洞,仍是其余外来的攻击,咱们天天都饱受着安全问题的煎熬。安全

其实,咱们也无需沮丧和纠结。既然,咱们不能阻止攻击,可是能够提早预防,尽可能将损失减到最小,不是吗?服务器

 

目前,有许多适用于ASP.NET应用的安全原则,好比深度防护、不信任任何输入数据、关闭没必要要的功能等等。可是,最基本的、最重要的原则仍是身份验证(Authentication)和受权(Authorization)。cookie

初次看到这两个概念,也许你们很容易犯迷糊。由于,Authentication和Authorization确实长得很像。其实,它们仅仅外表很像而已,内在却大不相同。session

 

验证(Authentication)架构

验证就是鉴定应用程序访问者身份的过程。验证回答了如下问题:当前访问的用户是谁?这个用户是否有效?在平常生活中,身份验证并不罕见。好比,经过检查对方的证件,咱们通常能够确信对方的身份。框架

 

受权(Authorization)数据库设计

受权是决定验证经过的用户应该拥有何种级别的访问安全资源的权限。资源能够是IIS上的页面文件、媒体文件(.jpeg)、压缩文件(.zip)等等。ide

下面咱们简单的描述验证和受权的过程。

 

 

 

ASP.NET身份验证方式

安全问题一直是ASP.NET的关注点。其中,Windows验证和表单验证(Forms Authentication)就是ASP.NET两种主要的安全机制。

Windows验证:通常用于局域网应用。使用Windows验证时,用户的Windows安全令牌在用户访问整个网站期间使用HTTP请求,进行消息发送。应用程序会使用这个令牌在本地(或者域)里验证用户帐号的有效性,也会评估用户所在角色所具有的权限。当用户验证失败或者未受权时,浏览器就会定向到特定的页面让用户输入本身的安全凭证(用户名和密码)。

Forms验证:Windows验证的局限性很是明显,一旦用户有超出本地域控制器范围的外网用户访问网站,就会出现问题。ASP.NET表单验证(Forms Authentication)很好的弥补了这一缺陷。使用表单验证,ASP.NET须要验证加密的HTTP cookie或者查询字符串来识别用户的全部请求。cookie与ASP.NET会话机制(session)的关系密切,在会话超时或者用户关闭浏览器以后,会话和cookie就会失效,用户须要从新登陆网站创建新的会话。

 

理解表单认证流程

第一步 在页面登陆框输入帐号和密码。

第二步 检查用户是否有效。能够从配置文件、SQL Server数据库或者其余外部数据源中查找。

第三步 若是用户有效,则在客户端生成一个cookie文件。cookie文件标识用户已经验证经过,当你访问网站其余资源时,不须要从新验证。

 

认识ASP.NET Membership

使用表单认证能解决基本的身份验证问题。可是,大部分应用程序还包含角色和用户管理以及权限信息的存储问题。所以,咱们不得不作下面这些事情:

  • 建立用户和角色表。
  • 编写访问数据表的代码。
  • 提供用户和密码验证的方法。

几乎每个应用程序,咱们都重复着作上面相似的事情。当微软发现这一问题后,在ASP.NET 2.0引入了Membership的重磅级技术方案。ASP.NET Membership很好的解决了WEB应用程序在成员资格方面的常见需求,这些需求包括表单身份验证,存储用户名、密码和用户资料信息 (profile)等。

 

在很长的一段时间内,Membership极大地简化了应用程序的编写。然而,咱们的需求愈来愈多,ASP.NET Membership自身设计的缺陷,难以适应这种变化。

  • 数据库架构受限于SQL Server。对其余数据库很难兼容。

  • 生硬的表存储结构。若是须要添加额外的用户资料信息,须要存储在其余表,使得这些信息难以访问(除非经过 Profile Provider API)。

  • 系统仅依据关系数据库设计。固然,你也能够写一个面向非关系型数据库的Provider(例如 Windows Azure 存储表),可是不得不写大量的代码,来解决兼容问题。

  • 不能使用OWIN。因为登陆、注销功能基于表单认证,第三方帐号的接入显得比较困难。

 OWIN (Open Web Interface for .NET):

OWIN 是一种定义 Web 服务器和应用程序组件之间的交互的规范 。这一规范的目的是发展一个广阔且充满活力的、基于 Microsoft .NET Framework 的 Web 服务器和应用程序组件生态系统。

Katana 是开源的的OWIN框架,主要用于微软.NET应用程序。Katana 2.0 将随 Visual Studio 2013 一块儿发布。 新版本有两个值得关注的方面:

  • 为自托管提供核心基础结构组件。
  • 提供了一套丰富的验证中间件(包括 Facebook、Google、Twitter 和 Microsoft Account 这样的社交提供商)以及适用于 Windows Azure Active Directory、cookie 和联合身份验证的提供程序

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

 

拥抱ASP.NET Identity

鉴于ASP.NET Membership的弊端,微软又开发一套新的安全框架ASP.NET Identity。ASP.NET Identity具备如下优点:

                                                               图  ASP.NET Identity基本功能

统一的框架

能够轻松地整合到 ASP.NET 各类框架以及程序上。例如,ASP.NET MVC, Web Forms, Web Pages, Web API 和 SignalR等。

自定义用户信息

能够很方便的扩展用户信息。好比,添加用户的生日,年龄等。


灵活的角色管理
ASP.NET Identity 中的角色提供程序让你能够基于角色来限制对应用程序某个部分的访问。你能够很容易地建立诸如 “Admin” 之类的角色,并将用户加入其中。

 

数据持久性以及兼容性

默认状况下,ASP.NET Identity 系统将全部的数据存储在SQL Server数据库中,而且使用 Entity Framework Code First 实现数据库的管理。

固然,对其余存储介质也有很好的支持。例如 SharePoint, Windows Azure 存储表服务, NoSQL 数据库等等。


单元测试能力

ASP.NET Identity 使得 Web 应用程序可以更好地进行单元测试。

 

OWIN 集成

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

NuGet 包

ASP.NET Identity 做为一个 NuGet 包进行发布,而且在 Visual Studio 2013 中做为 ASP.NET MVC, Web Forms 和 Web API 项目模板的一部分提供。你也能够从 NuGet 库中下载到该 NuGet 包。
这种发布方式使得 ASP.NET 团队可以为了添加新功能或者进行 BUG 修复更好的进行迭代,更加敏捷的进行发布给开发人员。

 

ASP.NET Identity主要组成部分

                                                                                  图 ASP.NET Identity基本组成部分

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

Microsoft.AspNet.Identity.Core 

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

Microsoft.AspNet.Identity.EntityFramework
  主要包括ASP.NET Identity 的EF 部分的实现。

Microsoft.AspNet.Identity.OWIN
  ASP.NET Identity对OWIN 的支持。

 

总结

本文首先介绍了一些安全机制,而后引伸到ASP.NET Membership,最后强调了ASP.NET Identity的优点。相信本文让你们对ASP.NET Identity有一个基本的了解,后续我将介绍如何扩展ASP.NET Identity,实现本身的用户和角色管理。

相关文章
相关标签/搜索