技术开发 频道

ASP.NET生命周期中的验证以及身份验证模块

  2.身份验证模块
       
  身份验证是利用ASP.NET中的身份验证模块来实现的。在ASP.NET中内置有四个验证模块:
     
  DefaultAuthenticateModule,FormsAuthenticateModule,WindowsAuthenticateModule,PassportAuthenticateModule.他们都实现了IHttpModule接口,当然,如果需要,我们也可以实现自定义的验证模块。

  从验证模块就可以看出我们一般的身份验证是怎么进行的,决定采用个验证模块是由我们决定采用哪种身份验证决定的,如Forms验证就是用了FormsAuthenticateModule来处理的。而且还要配置web.config文件中的<authentication/>元素。

  下面我们就先来看看身份验证模块的实现(伪码)

public class FormsAuthenticationModule:IHttpModule
{
        
#region IHttpModule 成员

        
public void Dispose()
        {
                
throw new NotImplementedException();
        }

        
public void Init(HttpApplication context)
        {
                context.AuthenticateRequest
+= new EventHandler(context_AuthenticateRequest);
        }
  
public event FormsAuthenticationEventHandler Authenticate;
        
#endregion
}

 

  大家可以看到,其实在模块的Init方法中就订阅了AuthenticateRequest事件,而我们在Global.asax中写的代码就是我们具体处理的代码:

void context_AuthenticateRequest(object sender, EventArgs e)
        {
                
//自定义验证代码
        }

  还有一点要注意的就是:每个模块都有一个Authenticate事件。
 
  下面就说说常用的两个个验证模块,因为大同小异:

  WindowsAuthenticateModule:
       
  WindowsAuthenticateModule是和IIS身份验证联合试用的,当web.config 的中配置如下:

    <authentication mode="Windows"/>

  此时,这个模块就激活了,在Global.asax文件中就的Application_Authenticate(object sender,eventArgs e)就是给Windows验证用的。

  这里有一个问题要澄清:如果是我们配置的是Windows身份验证,我们在Application_Authenticate中就只能写和Windows身份验证有关的代码,如果是配置的是Forms验证,我们在Application_Authenticate就只能写和Forms有关的代码,如获取cookie信息等。也就是说,Application_Authenticate方法是"一法多用"。

  接着谈 Windows验证,在上面的处理程序中,我们可以创建自己的用户信息,如我们创建一个WindowsPrincipal类的实例(实现了IPrincipal接口,包含用户名和角色的信息),然后它赋值给 HttpContext.User属性。这正如我们之前说的,验证事件执行完之后,我们就知道了这个请求的发起者的用户名和角色信息。
 
  FormsAuthenticateModule:
       
  首先还是要配置:<authentication mode="Forms"/>.
      
  FormsAuthenticateModule可以利用cookie解析保存在cookie中的用户的信息,并且创建一个GenericPrincipal,把用户名和角色信息保存在其中,然后赋值给User属性,以备后用。

0
相关文章