2011-07-14 93 views
0

我已经使用WSDualHttpBinding创建了一个WCF服务。未指定安全模式,因此将其设置为WSDualHttpSecurityMode.Message。带有邮件安全模式的WCF服务中的匿名函数调用

它工作正常,从客户端连接到具有证书的服务器,这是允许的。

当我使用凭据连接到服务器时,这是不被允许的,我得到一个SecurityNegotiationException。

这就是所有好的,我现在想要做的是,服务中有一个功能,允许匿名调用。

所以我想尝试调用该服务,并且当我的凭据不被允许时,我想调用一个名为GetDescription()的函数,该函数将返回该服务的描述。

原因是,我们正在托管一些服务,并通过广播发现它们。如果有服务,客户端不被允许,我想从服务中看到一些细节,通过重新配置服务来解决这个问题。

回答

0

验证在您的任何操作之前执行很长时间,因此具有开箱即用功能是不可能的,因为在WCF甚至知道用户调用什么操作之前发生异常。基于用户“权限”执行操作属于授权,仅对经过身份验证的用户执行操作。如果您想要现在做WCF,可能需要对安全管道进行一些修改,并将所选的SOAP操作从身份验证中排除(我实际上不确定如何执行此操作)。

您正在使用哪种类型的身份验证?如果您有默认配置,您应该拥有基于Windows的身份验证,然后您的用户只需使用有效的AD帐户登录即可调用您的服务。

Btw。为什么你在做自定义发现时WCF offers its own?您应该使用与WCF发现相同的机制 - 公开单独的不安全端点进行发现。

+0

目前只有基于Windows的身份验证服务,但将来还会有一些服务使用自定义身份验证。因此,我首先想尝试与基于Windows的身份验证进行连接,如果此操作失败,我想要求用户输入凭据并希望尝试使用这些凭据连接到该服务。 当时,当我要求用户输入凭证时,我想显示一些有关该服务的详细信息,以便用户可以更容易地识别服务,因为在同一台计算机上将运行多个服务。 – christian

+0

我想这将需要完全取代WCF认证机制。这通常通过暴露两个端点来完成 - 一个用于Windows身份验证,一个用于用户名身份验证。你试图做的主要是WCF/Web服务范围之外。 –

+0

我认为你是对的。也许我必须提供两个wcf服务。一个安全的和一个没有安全的提供描述。 – christian