我有一个非常简单的 WCF4 Restful Web 服务,它使用 WcfRestContrib 来允许自定义基本身份验证。当客户端抢先提供用户名和密码时效果很好,但如果它们不返回 400 Bad Request 响应,而不是要求客户端提供凭据(通过 401 响应)。
该服务使用声明性方法通过使用属性装饰必要的类来实现 WcfRestContrib。这是我的 ServiceContract 声明:
// Standard attributes here
[WebAuthenticationConfiguration(typeof(WebBasicAuthenticationHandler),
typeof(SecurityValidator),
false,
"SearchService")
]
public class SearchService
它只有一个非常简单的操作:
// Standard attributes here
[OperationAuthentication]
SearchResponse Fetch(SearchRequest request)
我的UserNamePasswordValidator
样子(尽管它可能无关紧要,因为它仅在传递凭据时才被调用):
public override void Validate(string userName, string password)
{
// TODO: Insert login validation logic here.
// To indicate login failure, throw a FaultException
// throw new FaultException("Unknown Username or Incorrect Password");
// Just return to indicate that the username and password are valid
return;
}
我尝试调试 WcfRestContrib 并发现WebBasicAuthenticationHandler
该类正在抛出一个BasicAuthorizationException
(仅在框架代码中捕获),但是,由于某种原因,它没有将异常转换为 401。
根据我在WcfRestContrib github 站点上阅读的内容,其作者 (Mike O'Brian) 发布了一个问题,他说他希望看到它返回除 401 之外的任何内容,因为它当前返回401挑战。
如果有这个功能,那么我错过了什么,或者我做错了什么?
更新
如果无法使用 WcfRestContrib 执行此操作,是否有其他方法可以实现此目的(除了在 IIS 中使用标准的基于 Windows 的基本身份验证)?我对任何(其他)替代解决方案持开放态度。