所有这些都与WebHttp绑定有关,该绑定驻留在自定义服务主机中(此时IIS不是一个选项)。
我实现了一个自定义UserNamePasswordValidator和一个自定义IAuthorizationPolicy。当我将端点的绑定配置为使用基本身份验证时,一切都按我的意愿工作(自定义主体、自定义角色等)。
我还想增加匿名HTTP访问的能力,并让我的自定义实现将匿名用户置于一些默认角色中,等等。(如果没有发送身份验证标头)。
现在发生的情况是,匿名用户在我的任何定制代码被击中之前都会得到401。如果我关闭了HTTP基本身份验证需求,那么身份验证头就会被完全忽略。
如何配置、或注入身份验证头,以做到这两种方式(而不创建两个独立的端点)?
发布于 2008-10-24 16:57:35
首先,根据规格说明,服务对匿名调用的响应是正确的。
其次,这是不可能的。当您自托管您的服务并且有一些http绑定时,WCF将使用System.Net.HttpListener实例来响应http请求(在System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen中创建)。此侦听器有一个名为HandleAuthentication的方法,在调用任何自定义代码之前调用该方法。它负责发送带有挑战的401响应(WWW-认证)。你对此无能为力。如果有,我想知道。
因此,您将有以下选项:
发布于 2008-10-18 04:04:55
我过去曾对此进行过研究,发现除非您创建两个独立的端点(这不是您想要的),否则通过配置是不可能的。WCF只是不支持它。
然而,WCF是非常可定制的,您可以通过编写一个定制的通道/绑定来实现这一点。我建议您查看一下休息棋盘 源代码。它应该会让你开始。
发布于 2008-10-20 18:53:58
您的最佳选择是通过角色提供程序实现默认角色,并让匿名用户自动加入该角色。然后以编程方式或通过策略注入(面向方面)策略进行设置,以便通过特定角色允许某些匿名访问。
至于通过配置设置这一点,如果可能的话,这将是相当困难的,有点“黑客”。
https://stackoverflow.com/questions/209795
复制相似问题