我已经使用WSDualHttpBinding创建了一个WCF服务。未指定安全模式,因此将其设置为WSDualHttpSecurityMode.Message。
它工作正常,使用凭证从客户端连接到服务器,这是允许的。
当我连接到具有凭据的服务器时,不允许这样做,我得到一个SecurityNegotiationException。
这一切都很好,我现在想要做的是,服务中有一个功能,允许匿名调用。
所以我想尝试调用该服务,当我的凭证不被允许时,我想调用一个名为GetDescription()的函数,它将返回一个服务描述。
原因是,我们正在托管一些服务,并将通过广播发现它们。如果有服务,不允许客户端,我希望通过重新配置服务来查看服务中的一些细节,以解决此问题。
答案 0 :(得分:0)
身份验证在任何操作之前执行很长时间,因此开箱即用的功能是不可能的,因为在WCF甚至知道用户调用的操作之前会触发异常。基于用户“权限”执行操作属于授权,并且仅对经过身份验证的用户执行。欺骗WCF以允许你现在想要这样做需要对安全管道进行一些修改,并从验证中排除选定的SOAP操作(我实际上不确定如何做到这一点)。
您使用的是哪种身份验证?如果您有默认配置,则应使用基于Windows的身份验证,然后只需用户使用有效的AD帐户登录时,您的用户就必须使用该服务。
顺便说一下。为什么在WCF offers its own时进行自定义发现?您应该使用与WCF发现相同的机制 - 为发现公开单独的不安全端点。