C#实现的自定义IIS认证模块 转载
IIS7以后application pool都支持两种模式:经典模式和集成模式。
所谓经典模式就是与IIS6的application pool运行模式相同,对于asp.net的页面请求处理由单独的asp.net filter完成。
集成模式是IIS7及以上的默认模式,对于各种请求的处理均在一条流水线上由不同的模块完成。

由于IIS7与.NET的完美结合使很多原本在IIS6中比较麻烦的事情变得简单。比如我们可以通过C#编写托管模块处理网站的所有请求,这在IIS6中需要通过非托管代码写ISAPI filter来完成。
最近就遇到一个小问题,网站因为某种原因需要同时启用匿名和windows集成认证,但是在特定情况下需要将匿名请求变成windows认证过的请求,于是就通过以下几行代码编译成一个IIS扩展dll模块,放在网站相应的bin目录下,然后到IIS Manager - Modules - Add Managed Module添加托管模块。在匿名请求进来的时候判断条件然后返回401 Authentication Challenge, 客户端就弹出认证框开始认证用户了。
- using System;
- using System.Web;
- namespace IISModules
- {
- public class CustomAuthenticationModule : IHttpModule
- {
- public const string HttpNtlmSchemeName = "NTLM";
- public const int HttpNotAuthorizedStatusCode = 401;
- public const string HttpWWWAuthenticateHeader = "WWW-Authenticate";
- public const string HttpAuthUserVariable = "AUTH_USER";
- public void IssueAuthenticationChallenge(object source, EventArgs e)
- {
- HttpApplication application = (HttpApplication)source;
- HttpContext context = application.Context;
- //省略其他判断条件
- if (string.IsNullOrEmpty(context.Request.ServerVariables[HttpAuthUserVariable]))
- {
- context.Response.StatusCode = HttpNotAuthorizedStatusCode;
- context.Response.AddHeader(HttpWWWAuthenticateHeader, HttpNtlmSchemeName);
- context.Response.AddHeader("Powered By", "CustomAuthenticationModule");
- }
- }
- public void Init(HttpApplication context)
- {
- context.EndRequest += new EventHandler(this.IssueAuthenticationChallenge);
- }
- public void Dispose()
- {
- }
- }
- }
这种极端的情况只是作为一个事例,但是这也说明了IIS提供了非常方便的扩展功能,在处理一些特殊情况上仍可以做到游刃有余。
C#实现的自定义IIS认证模块 转载的更多相关文章
- CMDB资产管理系统开发【day25】:Django 自定义用户认证
官方文档:https://docs.djangoproject.com/en/1.10/topics/auth/customizing/#substituting-a-custom-user-mode ...
- django CBV装饰器 自定义django中间件 csrf跨站请求伪造 auth认证模块
CBV加装饰器 第一种 @method_decorator(装饰器) 加在get上 第二种 @method_decorator(login_auth,name='get') 加在类上 第三种 @met ...
- iis重写模块实现程序自动二级域名,微软提供的URL重写2.0版本适用IIS以上
在iis7以后微软提供了url重写2.0版本,可以通过安装重写组件来实现.适用于iis7以上版本. 安装有两种方式可以选择,一是下载安装文件,二是通过“web平台安装程序”安装 1.下载安装文件 下载 ...
- spring Security的自定义用户认证
首先我需要在xml文件中声明.我要进行自定义用户的认证类,也就是我要自己从数据库中进行查询 <http pattern="/*.html" security="no ...
- author认证模块
author认证模块 用auth模块 你就用全套 不是自己写一部分 用别人一部分 创建超级管理员,用于登录DJango admin的后台管理 命令:createsuperuser,输入顺序用户 ...
- Django--csrf跨站请求伪造、Auth认证模块
form表单中使用跨站请求伪造 { % csrf_token % } 会动态生成一个input框,内部的value是随机刷新的 如果不想校验csrf from django.views.decorat ...
- drf JWT认证模块与自定制
JWT模块 在djangorestframework中,有一款扩展模块可用于做JWT认证,使用如下命令进行安装: pip install djangorestframework-jwt 现在,就让我们 ...
- 【Linux】常用的Linux可插拔认证模块(PAM)应用举例:pam_limits.so、pam_rootok.so和pam_userdb.so模块
常用的Linux可插拔认证模块(PAM)应用举例:pam_limits.so.pam_rootok.so和pam_userdb.so模块 pam_limits.so模块: pam_limits.so模 ...
- Django之Auth认证模块
一.Auth模块是什么 Auth模块是Django自带的用户认证模块: 我们在开发网站的时候,无可避免的需要设计实现网站的用户系统,此时我们需要实现包括用户注册,用户登陆,用户认证,注销修改密码等功能 ...
随机推荐
- andriod inputbox
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- C,C++经典问题
C,C++经典问题 1 编程基础 1.1 基本概念 1.1.1 指针的理解:const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目. ...
- java中各种数据类型占用字节数
1字节(Byte)=8bit java的基本类型 类型 所占字节 byte 1 short 2 int 4 long 8 float 4 double 8 char 2 String中字母和汉字所占字 ...
- 二十四种设计模式:模板方法模式(Template Method Pattern)
模板方法模式(Template Method Pattern) 介绍定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.Template Method使得子类可以不改变一个算法的结构即可重定义该算法 ...
- 解决安卓TextView高度和textSize大小不一致问题
在设计安卓界面的时候我发现一个TextView在布局上占用的高度和属性textSize的大小不一样,要比textSize要来的大(比如textSize="12dp",实际的高度大概 ...
- J2EE,LAMP和ASP.NET三者比较
为了开发一个动态网站出来,有3中选择,三种选择是一种三足鼎立的一种状态:LAMP J2EE .NET,各有各的好,下面自己总结一下 1.ASP.NET ASP.NET 的开发框架是 Window ...
- 隐藏系统EFI分区Z盘
找到C:\Windows\System32\cmd.exe程序, 右键单击cmd 选择以管理员身份运行, 打开命令提示符,输入以下命令(不区分大小写)DiskPart回车List空格volume回车s ...
- Node.js umei图片批量下载Node.js爬虫1.00
这个爬虫在abaike爬虫的基础上改改图片路径和下一页路径就出来了,代码如下: //====================================================== // ...
- liunx系统安装jdk的方法
1.下载jdk 下载地址: http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads ...
- list/tuple/dict/set
一.list(列表) 内置类型,长度可变的有序集合,索引从0开始,索引为负数是标识从右开始取,最右边第一个是-1,以此类推.里面的元素可以是不同类型的. 1.定义:a = [] #空列表 2.获取长度 ...