.net - WCF WebHttp 混合身份验证(基本和匿名)

标签 .net wcf http authentication http-authentication

所有这些都与 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/

相关文章:

c# - 将 unity.wcf 与 asp.net 路由集成

传递数据时python套接字http库发布请求不起作用

.net - 分析 elmah 日志

.net - .NET TableAdapter查询中的Mysql LIMIT语句

.net - 转义中间字符串百分号,正则表达式是最好的选择吗?

c# - HTTPERR 日志 : Request_Cancelled (while troubleshooting WCF service)

c# - EWS 代码和电子邮件签名

WCF:在 ServiceModel 客户端配置部分中找不到引用契约(Contract) 'IService' 的默认终结点元素。在 IIS 中托管时

python:urllib/urllib2/httplib困惑

web-services - REST URI 设计 : how update