ASP.NET安全问题--ASP.NET安全架构--如何实现.NET安全 (转)
2009-07-15 16:22
573 查看
ASP.NET安全架构--如何实现.NET安全
转自(/article/4666940.html)
前言:大家是否在用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)
{
Code
using System;
using System.Security.Principal;
public class CustomIdentity : IIdentity
{
private string name;
//构造函数只接收一个string参数,大家可以看看之前我们代码:GenericIdentity identity=new GenericIdentity("xiaoyang");
public CustomIdentity(string name)
{
this.name = name;
}
//
private string authenticateType = "CustomerIdentity";
public CustomIdentity(string name,string authenticateType)
{
this.name = name;
this.authenticateType = authenticateType;
}
//下面就实现接口
private bool isAuthenticated = false;
public bool IsAuthenticated
{
get { return isAuthenticated; }
}
private string name;
public string Name
{
get { return name; }
}
}
上面的代码只是示范,大家可以按照自己的要求扩展。
和之前一样,我们来看看ASP.NET中内置的Identity类:
FormsIdentity--在Forms验证中使用
PasswordIdentity--在Passport验证中使用
GenericIdentity--一般的普通的标识
WindowsIdentity--Windows 身份验证使用
我们来看看GenericIdentity的使用,其他的使用类推。
其实GenericIdentity标识的是一个基本的Identity 对象。它对于Identity对象来说是做基本的。之前我们看过一个GenericPrincipal的例子,在那个实例中我们创建一个GenericIdentity类的实例,
GenericIdentity identity=new GenericIdentity("xiaoyang");
而且我们还可以提供更加具体的Identity对象,如之前提到的FormsIdentity,开提供具体的用户信息。
转自(/article/4666940.html)
前言:大家是否在用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)
{
Code
using System;
using System.Security.Principal;
public class CustomIdentity : IIdentity
{
private string name;
//构造函数只接收一个string参数,大家可以看看之前我们代码:GenericIdentity identity=new GenericIdentity("xiaoyang");
public CustomIdentity(string name)
{
this.name = name;
}
//
private string authenticateType = "CustomerIdentity";
public CustomIdentity(string name,string authenticateType)
{
this.name = name;
this.authenticateType = authenticateType;
}
//下面就实现接口
private bool isAuthenticated = false;
public bool IsAuthenticated
{
get { return isAuthenticated; }
}
private string name;
public string Name
{
get { return name; }
}
}
上面的代码只是示范,大家可以按照自己的要求扩展。
和之前一样,我们来看看ASP.NET中内置的Identity类:
FormsIdentity--在Forms验证中使用
PasswordIdentity--在Passport验证中使用
GenericIdentity--一般的普通的标识
WindowsIdentity--Windows 身份验证使用
我们来看看GenericIdentity的使用,其他的使用类推。
其实GenericIdentity标识的是一个基本的Identity 对象。它对于Identity对象来说是做基本的。之前我们看过一个GenericPrincipal的例子,在那个实例中我们创建一个GenericIdentity类的实例,
GenericIdentity identity=new GenericIdentity("xiaoyang");
而且我们还可以提供更加具体的Identity对象,如之前提到的FormsIdentity,开提供具体的用户信息。
相关文章推荐
- ASP.NET安全问题--ASP.NET安全架构--如何实现.NET安全
- ASP.NET安全问题--ASP.NET安全架构--如何实现.NET安全
- ASP.NET安全问题--ASP.NET安全架构--如何实现.NET安
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
- ASP.NET安全架构--如何实现.NET安全
- ASP.NET安全架构--如何实现.NET安全
- ASP.NET三层架构详解 如何实现三层架构
- ASP.NET安全问题--ASP.NET安全架构
- 一起谈.NET技术,关于大型ASP.NET应用系统的架构—如何做到高性能高可伸缩性
- ASP.NET安全问题--ASP.NET安全架构
- [设计与架构] 如何实现asp.net三层架构
- 基于ASP.net C#技术来实现,介绍如何处理Session对象变量失效的问题
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
- 在asp.net中如何用LinkBtutton按钮实现安全退出,并保存当前页面数据与数据库中
- 高级别问题:如何在ASP.NET大型应用系统的模块化开发实现多版本程序集并存支持
- 前面在《Asp.Net Forums中对.Net中序列化和反序列化的应用》一文中讲了,对于一些扩展属性,可以将字符串集合序列化为二进制,也可以从二进制反序列化为字符串集合。其实我一直有个疑问,对于asp.net中可以很容易实现,但是在asp中该如何?
- ASP.NET安全问题--ASP.NET安全架构
- ASP.NET安全问题--ASP.NET安全架构
- 如何防止asp.net盗链下载问题的实现方法
- ASP.NET安全问题--ASP.NET安全架构