Web services Web服务的自定义基本身份验证

Web services Web服务的自定义基本身份验证,web-services,authentication,http-headers,basic-authentication,Web Services,Authentication,Http Headers,Basic Authentication,在.NET4.0中为asmx实现自定义基本身份验证时,我遇到了一个小问题。 我已经创建了HttpModule,它将启动运行此代码的web服务使用者的身份验证过程 HttpApplication application = (source as HttpApplication); HttpContext context = application.Context; if ( VirtualPathUtility.GetFileName(context.Request.FilePath).Conta

在.NET4.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
    }
}   
但是,每当到达此代码时,都不存在身份验证标头。 消费web应用程序只是简单地调用

EWS.svcEWS svcEWS = new EWS.svcEWS();
svcEWS.Credentials = new NetworkCredential("admin", "admin", "example.com");
svcEWS.HelloWorld();
IIS设置为使用匿名身份验证运行到匿名身份验证,以防止它捕获任何身份验证请求


让客户端将正确的头传递给我的模块,我是否遗漏了什么?

我忘记了用401代码拒绝第一个请求以强制验证。这样做可以解决问题,因为调用程序使用auth头重新发送请求。

Microsoft已经提供了一种自定义web服务身份验证的方法。它叫WCF!ASMX不打算以这种方式进行定制。不要浪费时间重新发明轮子。我同意,但是在我的特殊情况下,我模仿的是一个预先存在的Web服务,对使用它的客户端没有控制权。解决了。问题是我忘记了对失败的身份验证请求响应401以强制执行标头。很高兴您解决了问题,但在WCF中自定义安全性比使用HttpModule并与文件路径进行比较要干净得多。您应该添加一个答案,说明如何更改代码以使其工作,然后(一旦允许),你应该接受你自己的答案,我也面临同样的问题。你能解释一下你是如何“用401代码拒绝第一个强制认证的请求”的吗?