ASP.NET安全架构-如何实现.NET安全

前言:大家是否在用Forms验证的时候,常常被很多的概念搅混?是否真的明白什么是Principal,Identity,以及IPrincipan...?很多的文献很少提及这些到底是什么,仅仅是怎么用,结果出问题,导致很多的朋友的理解仅仅停在表面,使用起来也是束手束脚。相信看完本篇,会有一定的收获的。

ASP.NET安全架构为实现Web应用程序的安全模式提供了对象模型。不管我们选择哪一种的身份验证模式,其中很多的要素是相同的。登录到应用程序的用户按照他们提供的凭证被授予Principal和Identity。其中Principal对象表示的是用户的当前的安全上下文,包括用户的标识和他们所属的角色。Identity对象表示的是当前用户。Principal对象是利用Identity对象(表示用户的标识)创建的,而且它添加一些额外的信息,比如角色或者自定义的数据。

简言之:Principal=Identity+角色+自定义数据

大家要注意一点:身份验证是发生在ASP.NET运行的特定的时期的,记住这一点,具体的以后会讲的。 下面我们具体的谈:

一 表示安全的上下文

Identity对象表示的是通过身份验证的用户。Identity对象的类型取决于所使用的身份验证,如,Windows身份验证使用的是 WindowsIdentity对象,而Froms验证使用的是FormsIdentity对象。

大家开始接触Identity概念有点难受,其实说白了Identity就是一个用户的标识,标识是什么?就是标明用户是什么,用户名字是什么而已,只是我们这里说的比较专业一点点而已。

另外,Principal对象表示的是通过身份验证的用户的组或者角色的成员:也就当前用户安全上下文。说安全上下文,说白点就是这个对象包含很多的用户身份的一些信息。Principal对象是有IIS中的Windows 身份验证自动的创建的,但是我们也可以创建普通的Principal对象(大家后面就慢慢明白的).

大家在编程的时候,或多或少用过HttpContent.Currrent.User属性,其实它表示的就是一个Principal对象.Principal对象是实现了IPrincipal接口的。

IPrincipal 接口

不同的身份验证模式对安全的上下文有不同的要求。我们可以利用Principal对象表示当前的安全上下文。IPrincipal接口定义了Principal对象的基本功能。而且我们还可以自定义安全的上下文对象,只要实现System.Security.Principal接口:

Identity属性--可以获取当前Principal对象的Identity.之前说过:Principal包含Identity就是这个原因。

IsInRole(string roleName)方法--可以判断当前的Principal对象是否属于指定的角色。大家在变成时候也用过类似的HttpContent.Current.User.Identity.IsInRole("Admin")语句。

Principal对象可以通过HttpContent.Current.User属性访问到,下面的代码大家应该都用过的:

if(HttpContext.Current.User.Identity.IsAuthenticated)
  {
  lblUserName.Text=HttpContext.Current.User.Identity.Name+"已经登录";
  }

(注:Identity是用户的标识,包含用户名。我们后面会讲的)

下面的代码就更加的常见了:判断当前的用户是否是管理员角色

if(HttpContext.Current.User.IsInRole("Admin")
  {
  //
  }

时间: 2024-08-31 15:05:56

ASP.NET安全架构-如何实现.NET安全的相关文章

了解ASP.NET底层架构

asp.net|架构 了解ASP.NET底层架构 进入底层 这篇文章以非常底层的视角讲述了Web请求(request)在ASP.NET框架中是如何流转的,从Web服务器,通过ISAPI直到请求处理器(handler)和你的代码.看看在幕后都发生了些什么,不要再把ASP.NET看成一个黑盒了.   ASP.NET是一个非常强大的构建Web应用的平台,它提供了极大的灵活性和能力以致于可以用它来构建所有类型的Web应用.绝大多数的人只熟悉高层的框架如WebForms和WebServices-这些都在A

浅谈Asp.net多层架构中的变量引用与传递

asp.net|变量|架构 到公司已经快两个星期了,但是由于客户的需求分析没有下来,所有项目迟迟没有开始.正好利用这个时间仔细研究了一下Asp.net的多层架构,主要参考的是 Wrox 的一本<.Net WebSite Programming Problem-Design-Solution>,个人觉得这本书写的不错.面向有一定.net基础的开发人员,刚开始看起来可能觉得很难懂,但是仔细研究一下会发现,这本书是一本面向工程应用的优秀参考手册. Asp.net的多层架构主要是为了解决数据层,逻辑层

ASP.NET安全问题--ASP.NET安全架构

在开发Web程序中,我们可以选择用自己的方法来实现安全的策略,或者可以购买第三方的安全代码和产品,不管怎么样,都是要很大的花费的,幸好在.NET Framework中已经内置了安全的解决方案. ASP.NET和 .NET Framework 联合IIS为Web应用程序安全提供了一个基础结构.它的一个很明显的优势在于我们不必再编写自己的安全架构,我们可以利用.NET安全架构的内置的特性,而且整个安全的架构是经过测试和时间的考验了的. .NET安全架构包含了很多的类,这些类用来处理身份验证,授权,基

sqlserver-C#asp.net三层架构,怎么才能通过主键查询到相对应的记录

问题描述 C#asp.net三层架构,怎么才能通过主键查询到相对应的记录 类库代码如下: /// 把SqlDataReader对象中的数据读出到List中 /// 转换后的列表对象 private List GetUse(SqlDataReader reader) { List uselist = new List(); while (reader.Read()) { use.UName = reader["UName"].ToString(); use.Password = read

请问谁有asp.net三层架构的网上书店系统的源代码

问题描述 请问各位谁有asp.net三层架构的网上书店系统的源代码(用vb.net写的),给小弟我发一个!感激不尽! 解决方案 解决方案二:怎么都做这个呢?北大青鸟?挨..我上学的时候就没做挖嘎嘎因为一点技术含量都木有解决方案三:同一个问题,发多个帖子,散粉吗?

ASP.NET三层架构详解 如何实现三层架构_实用技巧

一.数据库 /*==============================================================*/ /* DBMS name: Microsoft SQL Server 2000 */ /*==============================================================*/ if exists (select 1 from sysobjects where id = object_id('newsConte

ASP.NET底层架构探索之进入ASP.NET

asp.net|架构 ASP.NET是一个非常强大的构建Web应用的平台,它提供了极大的灵活性和能力以致于可以用它来构建所有类型的Web应用.绝大多数的人只熟悉高层的框架如WebForms和WebServices-这些都在ASP.NET层次结构在最高层.在这篇文章中我将会讨论ASP.NET的底层机制并解释请求(request)是怎么从Web服务器传送到ASP.NET运行时然后如何通过ASP.NET管道来处理请求. 对我而言了解平台的内幕通常会带来满足感和舒适感,深入了解也能帮助我写出更好的应用.

ASP.NET底层架构之从浏览器到ASP.NET

asp.net|架构|浏览器 让我们从一个典型的ASP.NET Web请求的生命周期的起点开始.当用户输入一个URL,点击了一个超链接或者提交了一个HTML表单(form)(一个POST请求,相对于前两者在一般意义上都是GET请求).或者一个客户端程序可能调用了一个基于ASP.NET的WebService(同样由ASP.NET来处理).在Web服务器端,IIS5或6,获得这个请求.在最底层,ASP.NET和IIS通过ISAPI扩展进行交互.在ASP.NET环境中这个请求通常被路由到一个扩展名为.

ASP.NET底层架构探索之IE6的革新

asp.net|架构 IIS 5 和6以不同的方式工作 当一个请求来到时,IIS检查脚本映射(扩展名映射)然后把请求路由到aspnet_isapi.dll.这个DLL的操作和请求如何进入ASP.NET运行时在IIS5和6中是不同的.图2显示了这个流程的一个粗略概览. 在IIS5中,aspnet_isapi.dll直接寄宿在inetinfo.exe进程中,如果你设置了Web站点或虚拟目录的隔离度为中或高,则会寄宿在IIS单独的(被隔离的)工作进程中.当第一个ASP.NET请求来到,DLL(aspn