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自带的用户认证模块: 我们在开发网站的时候,无可避免的需要设计实现网站的用户系统,此时我们需要实现包括用户注册,用户登陆,用户认证,注销修改密码等功能 ...
随机推荐
- redis_常见问题
一.使用shutdown关闭服务后,使用redis-server.redis-server redis.conf.redis-cli均提示无法连接,运行命令services.msc,启动redis服务 ...
- [Linux] linux文件系统学习
linux系统支持很多种文件系统. 1. 如何确认当前系统挂载了哪些文件系统? 使用mount命令可以查看当前系统上已经挂载了哪些文件系统, lqt@lqt-ThinkPad-T420:~$ moun ...
- unity shader 编译时间过长
去掉opengles2.0能省一半时间 换ssd Compiled shader 'Shader Forge/Scenes_Ground_Standard_M' in 315.51s gles ...
- megalo -- 网易考拉小程序解决方案
megalo 是基于 Vue 的小程序框架(没错,又是基于 Vue 的小程序框架),但是它不仅仅支持微信小程序,还支持支付宝小程序,同时还支持在开发时使用更多 Vue 的特性. 背景 对于用户而言,小 ...
- 使用Material Design 创建App翻译系列---列表和卡片集的创建
上一篇是使用Material Design 创建App翻译系列--材料主题的使用(Using Material Theme),进入正题: 想要在应用里创建Material Design风格的复杂列表和 ...
- Android adb shell学习心得(四)
1.awk中的sub sub为替换函数.形式如 sub(/1/,"",$2) 将第二个变量的第一个1替换为空,若将sub替换为gsub.则替换全部的1. 2.awk中的-F 分隔符 ...
- 从客户端的角度来谈谈移动端IM的消息可靠性和送达机制
1.前言 IM App 是我做过 App 类型里复杂度最高的一类,里面可供深究探讨的技术难点非常之多.这篇文章和大家聊下从移动端客户端的角度所关注的IM消息可靠性和送达机制(因为我个人对移动客户端的经 ...
- iOS多线程之NSOperation和NSOperationQueue的使用
一:NSOperation 两个子类+重写main方法 NSInvocationOperation NSBlockOperation 有个类方法 BlockOprationWith: 还有就是自己个子 ...
- jQuery实现滚动栏一直处于最底部
相信大家有时候在展示一些实时数据展示并且数据量非常大的时候,由于无法在同一页面看到最有效的数据,所以我们须要将滚动栏至于底部.以便我们看到最须要的数据和信息.这里非常明显的样例那拿windows的pi ...
- 算法笔记_161:算法提高 十进制数转八进制数(Java)
目录 1 问题描述 2 解决方案 1 问题描述 编写函数,其功能为把一个十进制数转换为其对应的八进制数.程序读入一个十进制数,调用该函数实现数制转换后,输出对应的八进制数. 样例输入 9274 样 ...