我有一个ASP.NET MVC应用程序,我尝试使用自定义基本身份验证(他们通过我自己的数据库进行身份验证)尝试保护一些RESTful服务。我通过编写HTTPModule实现了这一点。自定义基本身份验证在IIS7中失败
我已经一种方法附接到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标头。
任何想法?