所有这些都与 WebHttp 绑定(bind)有关,托管在自定义服务主机中(IIS 目前不是一个选项)。
我已经实现了自定义 UserNamePasswordValidator 和自定义 IAuthorizationPolicy。当我将端点的绑定(bind)配置为使用基本身份验证时,一切都按照我的意愿进行(自定义主体、自定义角色等)。
我也想添加匿名 HTTP 访问的能力,并让我的自定义实现将匿名用户置于某些默认角色等。(如果没有发送 Authenticate header )。
现在发生的情况是,在我的任何自定义代码被命中之前,匿名用户都会收到 401。如果我关闭 HTTP 基本身份验证要求,那么 Authenticate header 将被完全忽略。
如何配置、或注入(inject)一个 Authenticate header,以双向执行此操作(无需创建 2 个单独的端点)?
最佳答案
首先,服务根据 specification 正确响应匿名调用。 .
其次,这是不可能的。当您自托管服务并且有一些 http 绑定(bind)时,WCF 将使用 <a href="http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx" rel="noreferrer noopener nofollow">System.Net.HttpListener</a>
能够响应 http 请求的实例(在 System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen
中创建)。这个监听器有一个名为 HandleAuthentication
的方法在调用任何自定义代码之前调用它。它负责发回带有质询 (WWW-Authenticate) 的 401 响应。你对此无能为力。如果有,我想知道。
所以你有以下选择:
- 两个端点
- 将您的客户端配置为知道默认凭据
- 改变你的客户,使他们能够应对挑战
关于.net - WCF WebHttp 混合身份验证(基本和匿名),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/209795/