【问题标题】:Custom Basic Authentication of a Web serviceWeb 服务的自定义基本身份验证
【发布时间】:2011-08-04 18:55:18
【问题描述】:

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

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

【问题讨论】:

  • Microsoft 已经提供了一种自定义 Web 服务身份验证的方法。它被称为WCF! ASMX 不打算以这种方式进行定制。不要浪费时间重新发明轮子。
  • 我同意,但是在我的特殊情况下,我正在模仿一个预先存在的网络服务,并且无法控制使用它的客户端。
  • 已解决。问题是我忘记对失败的身份验证请求响应 401 以强制标头。
  • 很高兴您解决了问题,但是在 WCF 中自定义安全性要比使用 HttpModule 并与文件路径进行比较要干净得多。
  • 您应该添加一个答案,显示您如何更改代码以使其正常工作,然后(一旦Stack Overflow 允许您),您应该接受自己的答案。

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


【解决方案1】:

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

【讨论】:

  • 我也面临同样的问题。您能否解释一下您如何“拒绝第一个使用 401 代码强制身份验证的请求”?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-04
  • 2011-08-26
  • 2013-06-11
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多