所有这些都与 WebHttp 绑定有关,托管在自定义服务主机中(IIS 目前不是一个选项)。

我已经实现了自定义 UserNamePasswordValidator 和自定义 IAuthorizationPolicy。当我将端点的绑定配置为使用基本身份验证时,一切都会按照我的意愿运行(自定义主体、自定义角色等)。

我还想添加匿名 HTTP 访问的功能,并让我的自定义实现将匿名用户置于某些默认角色等。(如果没有发送验证标头)。

现在发生的情况是,在我的任何自定义代码被命中之前,匿名用户都会收到 401 错误码。如果我关闭 HTTP 基本身份验证要求,则 Authenticate 标头将被完全忽略。

我该如何配置, 或注入 Authenticate 标头, ,以两种方式执行此操作(无需创建 2 个单独的端点)?

有帮助吗?

解决方案

首先,服务正确响应匿名调用,根据 规格.

其次,这是不可能的。当您自托管服务并且有一些 http 绑定时,WCF 将使用 System.Net.HttpListener 实例能够响应http请求(创建于 System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen)。这个监听器有一个方法叫做 HandleAuthentication 在调用任何自定义代码之前调用它。它负责发回带有质询(WWW-Authenticate)的 401 响应。您对此无能为力。如果有的话我很想知道。

所以你有以下选择:

  • 两个端点
  • 配置您的客户端以了解默认凭据
  • 改变您的客户,以便他们能够应对挑战

其他提示

我过去对此进行了研究,发现除非您创建2个单独的端点(这不是您想要的),否则无法进行配置。只是WCF不支持开箱即用。

但是,WCF非常可定制,您可以通过编写自定义通道/绑定来实现此目的。我建议您查看 REST Chess 源代码。它应该让你开始。

最好的选择是通过角色提供程序实现默认角色,并让匿名用户自动加入该角色。然后以编程方式或通过策略注入(面向方面​​)策略进行设置,以便通过特定角色允许某些匿名访问。

至于通过配置进行设置,如果可能的话,会相当困难并且有点“hacky”。

我不这么认为......当我决定再次阅读你的问题并注意到你问题的最后陈述时,我只是在写你需要创建单独的端点。所以答案是否定的(我知道)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top