资深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方法中的请求。