WCF - 禁用客户端应用程序的浏览器身份验证

时间:2014-07-25 17:43:55

标签: c# asp.net wcf authentication

我使用带有C#的.NET4.5创建了一个WCF OData服务。在应用程序中,有一个表单基本身份验证实现,它使用ASP.NET身份运行良好。

以下是我在服务应用程序中的代码,我在其中拦截授权标头并验证请求。

 protected override void OnStartProcessingRequest(ProcessRequestArgs args)
    {
         bool isAuthenticated = CustomBasicAuth.Authenticate(HttpContext.Current);
         if (!isAuthenticated)
         {
             args.OperationContext.ResponseHeaders.Add("WWW-Authenticate", "Basic");
             HttpContext.Current.Response.SuppressFormsAuthenticationRedirect = true;
             throw new DataServiceException(401, "Invalid login or password");
         }

        base.OnStartProcessingRequest(args);
    }

因此,每当我在浏览器中访问服务应用程序时,都会提示浏览器登录。这非常适合测试目的。

Browser Login Form

然后我有一个基于Web的客户端来调用该服务。在无效登录时,它返回401错误,这是预期的,我可以处理它。但它也会提示浏览器登录表单。如何在客户端应用中禁止此表单。 (禁用浏览器属性不是一个选项)

1 个答案:

答案 0 :(得分:1)

您可以通过 web.config 拒绝访问未经身份验证的用户的服务/位置:

<configuration>
  <location path="Path/To/Folder/YourService.svc">
    <system.web>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </location>
...
</configuration>

相同的模式可以应用于任何aspx页面,asmx经典Web服务等。