zoukankan      html  css  js  c++  java
  • http modules在.net安全认证中的作用

    介绍一下如何在asp.net中使用http moudle创建自定义的安全认证

    首先了解asp.net对web request的处理过程
    http modules是一个实现了IHTTPModule接口基础类. 用来处理Web Request.
    asp.net内置的Modules有
    Output Cache Module
    Windows Authentication Module
    Forms Authentication Module
    Passport Authentication Module
    URL Authorization Module
    File Authorization Module
    我们可以修改这些现有的modules来增加新的功能,也可以新增modules来自定义功能.比如,我们可以自定义安全模块利用活动目录.

    modules在http application event触发时被执行
    IHTTP Module有以下两个方法
       Init( HttpApplication objApplication)
              为HttpApplication Events注册event handler.
       Dispose()
              Release the resources.

    实现自定义custom http module的步骤
    1.创建一个实现了IHTTPModule接口的类
    using System;
    using System.Web;
    namespace CustomModule
    {
    public class CustomAuthnModule : IHttpModule
    {
    public CustomAuthnModule()
    {
    }
    public void Init(HttpApplication objHttpApp)
    {
    }
    public void Dispose()
    {
    }
    }

    2.在Init方法中注册Events
    public void Init(HttpApplication objHttpApp)
    {
    objHttpApp.AuthenticateRequest
    +=new EventHanlder(this.CustomAuthentication);

    3.编写注册event的处理函数
    private void CustomAuthentication (object sender,EventArgs evtArgs)
    {
    HttpApplication objHttpApp
    =(HttpApplication) sender;
    objHttpApp.Context.Response.Write(
    "Custom Authentication Module is Invoked");

    4.在GAC中加入DLL
    1)创建一个强名称文件
    sn –k key.snk
    2)将key文件加入到AssemblyInfo.cs的属性AssemblyKeyFile中
    3)gacutil /i CustomModule.dll

    5.在web.config注册HttpModule
    <httpmodules /><httpModules>
    <add name ="ModuleName" type="Namespace.ClassName","AssemlbyName">
    </add >
    </httpModules> </httpModules>

    实例:一个基于数据库身份认证的自定义Module
    using System;
    using System.Web;
    using System.Data;
    using System.Data.SqlClient;
    namespace CustomAuthorizationModule
    {
    public class CustomAuthorizationModule : IHttpModule
    {
    public CustomAuthorizationModule()
    {

    }
    public void Init(HttpApplication objApp)
    {
    objApp.AuthorizeRequest 
    += new
    EventHandler(
    this.CustomDBAuthorization);
    }
    public void Dispose()
    {
    }
    private void CustomDBAuthorization(object sender,EventArgs
    evtArgs)
    {
    HttpApplication objApplication 
    =(HttpApplication)sender;
    string sAppPath,sUsrName;
    bool bAuthorized = false;
    sAppPath
    =objApplication.Request.FilePath.ToString();
    sUsrName
    =objApplication.Request.Params[0].ToString();
    bAuthorized 
    = DBAuthorize(sUsrName,sAppPath);
    if(bAuthorized)
    {
    objApplication.Context.Response.Write(
    "Authorized User");
    }
    else
    {
    objApplication.Context.Response.Write(
    "UnAuthorized User");
    objApplication.Response.End();
    }
    }
    private string DBAuthorize(string sUsrName,string sAppPath)
    {
    SqlConnection sqlConn
    =new SqlConnection()
    sqlConn.ConnectionString
    ="user id=sa;Pwd=password;Data Source=localhost;Initial

    Catalog
    =Northwind");
    SqlCommand sqlCmd=new SqlCommand();
    SqlParameter sqlParam
    =new SqlParameter();
    sqlCmd.Connection
    =sqlConn;
    sqlConn.Open();
    sqlCmd.CommandType
    =CommandType.StoredProcedure;
    sqlCmd.CommandText
    ="sAuthorizeURL";
    sqlParam 
    = sqlCmd.Parameters.Add ("@UserName",SqlDbType.VarChar,30);
    sqlParam 
    = sqlCmd.Parameters.Add("@URLPath",SqlDbType.VarChar,40);
    sqlCmd.Parameters[
    "@UserName"].Value=sUsrName;
    sqlCmd.Parameters[
    "@URLPath"].Value=sAppPath;
    string res=sqlCmd.ExecuteScalar().ToString();
    if(res == "Authorized")
    {
    return true;
    }
    else
    {
    return false;
    }

    }
    }


    转自:http://www.cnblogs.com/jecray/archive/2007/05/27/761444.html
    感谢原作者:jecray  !!
  • 相关阅读:
    酒香也怕巷子深,谈谈前端简历书写技巧。
    谈谈自己对语义化的认识
    服务器向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的HTTP动词)
    Python常用库大全
    Python七大原则,24种设计模式
    Python设计模式(4):行为型
    Python设计模式(3):结构型
    Python设计模式(2):创建型
    python设计模式
    数据库的优化
  • 原文地址:https://www.cnblogs.com/tuyile006/p/888147.html
Copyright © 2011-2022 走看看