0

我正在尝试保护我们的 WCF 服务并不断遇到问题。我们利用 ChannelFactory 在 silverlight 客户端和服务器之间建立连接。

我最初使用 TransportWithMessageCredential 将用户名和密码从客户端发送到服务器。只要托管服务的服务器和 silverlight 客户端是相同的 url,我就可以正常工作。一旦我更改了网址,我就会收到安全错误。我设置了一个 crossdomain.xml 策略,就像错误中建议的那样,但这并没有解决问题。经过一些研究,我发现如果使用跨站点调用并传递用户名,您需要使用证书来保护您的消息。

我现在正在尝试在客户端中设置证书。由于客户端在多个办公室使用,我们无法在每台机器上安装证书。我想将其作为嵌入式资源,然后在创建 channelfactory 时设置证书。我已经看到了这样做的例子,这些例子表明了以下内容。

var channelFactory = new ChannelFactory<IYourService>();
channelFactory.Credentials.ClientCertificate.Certificate = 
                                     clientCertificate;

但是,我没有在凭据上看到 ClientCertificate 的属性。我只看到用户名。

是不是我做错了什么,或者这在 Silverlight 中是不可能的?

4

1 回答 1

0

问题原来是我的 clientaccesspolicy.xml 文件不支持 SSL。一旦我解决了这个问题,我就可以使用 TransportWithMessageCredential 安全模式,并且不需要安装客户端证书。

对于那些遇到此类问题的人,您的客户端访问策略应如下所示。

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
 <cross-domain-access>
   <policy>
     <allow-from http-request-headers="*">
       <domain uri="https://*"/>
       <domain uri="http://*"/>
     </allow-from>
     <grant-to>
       <resource path="/" include-subpaths="true"/>
     </grant-to>
   </policy>
</cross-domain-access>

于 2013-09-16T18:18:23.850 回答