所有这些都与 WebHttp 绑定有关,托管在自定义服务主机中(IIS 目前不是一个选项)。
我已经实现了自定义 UserNamePasswordValidator 和自定义 IAuthorizationPolicy。当我将端点的绑定配置为使用基本身份验证时,一切都会按照我的意愿运行(自定义主体、自定义角色等)。
我还想添加匿名 HTTP 访问的功能,并让我的自定义实现将匿名用户置于某些默认角色中,等等(如果没有发送 Authenticate 标头)。
现在发生的情况是,在我的任何自定义代码被命中之前,匿名用户都会收到 401 错误码。如果我关闭 HTTP 基本身份验证要求,则 Authenticate 标头将被完全忽略。
我该如何配置,或注入 Authenticate 标头,以两种方式执行此操作(无需创建 2 个单独的端点)?
首先,服务正确响应匿名调用,根据规格 http://www.faqs.org/rfcs/rfc2617.html.
其次,这是不可能的。当您自托管服务并且有一些 http 绑定时,WCF 将使用System.Net.HttpListener http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx
实例能够响应http请求(创建于System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen
)。这个监听器有一个方法叫做HandleAuthentication
在调用任何自定义代码之前调用它。它负责发回带有质询(WWW-Authenticate)的 401 响应。您对此无能为力。如果有的话我很想知道。
所以你有以下选择:
- 两个端点
- 配置您的客户端以了解默认凭据
- 改变您的客户,以便他们能够应对挑战
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)