快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
的要求实现自定义的Principal对象。下面会讲到的。

IPrincipal接口的每一个实现都要重写Identity属性和IsInRole方法。GenericPrincipal类的IsInRole方法是通过把角色值和在字符串在中定义的角色进行比较,而WindowsPrincipal类的IsInRole方法则是把角色和被分配到Windows用户帐户角色进行比较。

我们可以创建一个在当前请求的整个生命周期中都要使用的GenericPrincipal类的实例,并把它赋值给HttpContent.Current.User属性。

GenericPrincipal的构造函数有两个参数:用户的GenericIdentity(用户标识GenericIdentity实现了IIdentity接口),和一个表示用户角色的字符串数组。所以我们之前说:Principal=Identity+角色就是这原因。

GenericPrincipal 对象一旦被创建,就可以赋值到HttpContent.Current.User属性,用来表示当前请求用户的安全的上下文。

下面就是创建的代码例子:

//创建一般的GenericPrincipal
  //我们说过:标识就是包含用户名的对象,如下 包含一个名为"xiaoyang"的标识
  GenericIdentity identity=new GenericIdentity("xiaoyang");

  //创建GenericPrincipal
  //注roles表示的是一个角色的字符串数组如role=new string{"Admin","Customer"};
  GenericPrincipal principal=new GenericPrincipal(identity,roles);

  //附加
  HttpContext.Current.User=principal;

注意:上面的代码是要写在特定的地方,也就是生命周期的特定的时候的,我们后面讲述。

说了Principal,下面就说说用户标识到底是什么,之前多次提到的。

二 用户标识

Identity对象用于标识当前用户的标识。标识只能提供少量的安全上下文信息,如用户名。Identity对象可以验证用户。

IIdentity接口

和IPrincipal接口一样,表示用户标识的对象都要实现这个接口。IIdentity接口定义了Identity对象的基本额的结构,定义如下:

AuthenticationType(string类型的)属性--它可以获取所使用的身份验证的类型,如,如果使用的Forms验证,该属性返回"Forms"字符串,所以我们自定义的标识可以返回"CustomIdentity"字符串。

IsAuthenticated(bool类型)属性--标识用户是否通过身份验证。我们可以常常用HttpContext.Current.User.Identity.IsAuthenticated来判断用户是否已经登录。

Name(string 类型的)属性--获取用户的名字。相信对HttpContext.Current.User.Identity.Name不陌生。

下面我们就看看我们自己的实现了IIdentity接口的标识类。

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; }
        }

        priv

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号