设为首页 收藏本站
查看: 594|回复: 0

[经验分享] C#实现的自定义IIS认证模块

[复制链接]

尚未签到

发表于 2017-2-12 12:33:50 | 显示全部楼层 |阅读模式
  IIS7以后application pool都支持两种模式:经典模式和集成模式。
  所谓经典模式就是与IIS6的application pool运行模式相同,对于asp.net的页面请求处理由单独的asp.net filter完成。
  集成模式是IIS7及以上的默认模式,对于各种请求的处理均在一条流水线上由不同的模块完成。
DSC0000.jpg

  由于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提供了非常方便的扩展功能,在处理一些特殊情况上仍可以做到游刃有余。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-341091-1-1.html 上篇帖子: IIS版本的选择和安装,解决遇到的问题 下篇帖子: Windows XP上给IIS注册WCF服务
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表