我使用带有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);
}
因此,每当我在浏览器中访问服务应用程序时,都会提示浏览器登录。这非常适合测试目的。
然后我有一个基于Web的客户端来调用该服务。在无效登录时,它返回401错误,这是预期的,我可以处理它。但它也会提示浏览器登录表单。如何在客户端应用中禁止此表单。 (禁用浏览器属性不是一个选项)
答案 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服务等。