我在.net 4.0中为asmx实现自定义基本身份验证时遇到了一个小问题。 我已经创建了HttpModule,它将启动Web服务使用者运行此代码的身份验证过程,
HttpApplication application = (source as HttpApplication);
HttpContext context = application.Context;
if ( VirtualPathUtility.GetFileName(context.Request.FilePath).Contains("svcEWS.asmx"))
{
string username = "", password = "";
string authHeader = HttpContext.Current.Request.Headers["Authorization"];
if (!string.IsNullOrEmpty(authHeader) && authHeader.StartsWith("Basic"))
{
//Authenticate here
}
}
但是,无论何时到达此代码,都不会出现身份验证标头。 消费的网络应用程序只是在呼叫,
EWS.svcEWS svcEWS = new EWS.svcEWS();
svcEWS.Credentials = new NetworkCredential("admin", "admin", "example.com");
svcEWS.HelloWorld();
IIS设置为使用匿名身份验证运行匿名身份验证,以防止它捕获任何身份验证请求。
我是否缺少让客户端将正确的标头传递给我的模块的东西?
答案 0 :(得分:2)
我忘了用401代码拒绝第一个强制认证的请求。这样做可以解决问题,因为调用者使用auth标头重新发送请求。