IIS7中的自定义基本身份验证失败

时间:2010-04-18 19:35:01

标签: asp.net-mvc authentication iis-7 httpmodule custom-authentication

我有一个ASP.NET MVC应用程序,有一些RESTful服务,我试图使用自定义基本身份验证来保护它们(它们是根据我自己的数据库进行身份验证)。我已经通过编写HTTPModule实现了这一点。

我有一个方法附加到HttpApplication.AuthenticateRequest事件,该事件在身份验证失败的情况下调用此方法:

    private static void RejectWith401(HttpApplication app)
    {
        app.Response.StatusCode = 401;
        app.Response.StatusDescription = "Access Denied";
        app.CompleteRequest();
    }

此方法附加到HttpApplication.EndRequest事件:

    public void OnEndRequest(object source, EventArgs eventArgs)
    {
        var app = (HttpApplication) source;
        if (app.Response.StatusCode == 401)
        {
            string val = String.Format("Basic Realm=\"{0}\"", "MyCustomBasicAuthentication");
            app.Response.AppendHeader("WWW-Authenticate", val);
        }
    }

此代码添加了“WWW-Authenticate”标题,告诉浏览器抛出登录对话框。当我使用Visual Studio的Web服务器进行本地调试时,这非常有效。但是当我在IIS7中运行它时失败了。

对于IIS7,除了匿名之外,我都关闭了内置的身份验证模块。它仍然返回HTTP 401响应,但它似乎正在删除WWW-Authenticate标头。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我明白了。问题是我将此模块命名为“BasicAuthenticationModule”,它与IIS内置的另一个模块冲突。一旦我重命名模块,一切工作正常!

答案 1 :(得分:1)