C#实现的自定义IIS认证模块
来源:互联网 发布:windows平板应用 编辑:程序博客网 时间:2024/06/07 06:43
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认证模块
- C#中实现https的双向认证
- 自定义Realm实现认证
- c# 实现Form认证
- IIS 7.5中设置站点Windows认证失败三次后弹出自定义错误页面的方法
- C#自定义控件的实现
- C# 自定义控件的实现
- 如何自定义Tomcat Realm实现我们的用户认证需求
- 如何自定义Tomcat Realm实现我们的用户认证需求
- 如何自定义Tomcat Realm实现我们的用户认证需求
- Shiro 自定义realm授权与认证的实现
- HTTP Basic Authentication认证的资源的C#实现
- Laravel的用户认证模块
- 自定义实现无模块
- ASP.NET应用中用C#实现基于表单的认证
- sharepoint 中的IIS的身份认证问题.
- C#实现IIS的启动、停止、重启
- C#实现IIS的启动、停止、重启
- extjs tree(树)换节点图标及去掉图标后去掉空白部分
- BlockingQueue详解
- EFM32片内外设--GPIO EM4唤醒
- JSTL-c标签
- JAVA中的开源标记库下载网址
- C#实现的自定义IIS认证模块
- ollydbg使用初步(1)
- Android:如何启动外部应用程序?
- 如何设置Office Word2003的一级与二级标题
- iOS关闭键盘的两种简单方法
- mysql update safe model 一些问题
- RequireJS 2.0 API之配置项
- 多线程编程之一——问题提出
- Tomcat服务器配置