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

时间:2011-08-04 18:55:18

标签: web-services authentication http-headers basic-authentication

我在.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设置为使用匿名身份验证运行匿名身份验证,以防止它捕获任何身份验证请求。

我是否缺少让客户端将正确的标头传递给我的模块的东西?

1 个答案:

答案 0 :(得分:2)

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