IHttpModule处理太多请求

时间:2019-02-21 14:21:32

标签: c# asp.net ihttpmodule

资深stackoverflow'rs。我在一个问题上困扰了很长时间,希望得到您的帮助。我是asp.net的菜鸟。我在生产和开发环境(我没有任何控制权)上部署了一个第三方的asp.net应用程序(简称为应用程序A或appA),并且我想对该应用程序启用多因素身份验证。我有一个自定义构建的多因素身份验证解决方案,我们的许多内置应用程序以及其他客户端也使用了该解决方案。我计划在appA上实现多因素身份验证的方式是通过IHttpModule。

这是我班的声明

public abstract class ISHttpModule : IHttpModule

我已经按照以下方式注册了事件处理程序

public void Init(HttpApplication application)
{
    application.PostAuthorizeRequest += new EventHandler(this.Application_PostAuthorizeRequest);
}

appA要求应用程序正常运行需要许多资源(200多个),我想拦截一个请求并将用户重定向到部署在同一个IIS中的我的网站,以请求OTP(一次性密码)

private void Application_PostAuthorizeRequest(object source, EventArgs args)
{
    HttpApplication httpApplication = (HttpApplication)source;
    HttpContext context = this.httpApplication.Context;
    string requestedResource = GetRequestedResourceRelativeToApplication(context).ToLower();
    if (!requestedResource.Equals("auth"))
    {
        if (!userNotAuthenticatedThroughCookies) {
        // Redirect user to my another page and make cookie (make user authenticated to true)
        callABCMethod();
        } else // do nothing    
    }
}

protected string GetRequestedResourceRelativeToApplication(HttpContext context)
{
    return context.Request.Path.Substring(context.Request.ApplicationPath.Length);
}

问题是(很明显,当appA发送多个请求时)我的系统一次接收到多个请求(直到我设置了用户经过身份验证的Cookie),这会生成多个OTP。如果已经有一个(第一个)请求未得到完全处理,我想忽略所有将出现在Application_PostAuthorizeRequest方法中的请求。

0 个答案:

没有答案