【问题标题】:How to secure a Silverlight-Enabled WCF Web Service with SSL?如何使用 SSL 保护启用 Silverlight 的 WCF Web 服务?
【发布时间】:2009-05-09 00:50:20
【问题描述】:

如何使用 SSL 保护启用 Silverlight 的 WCF Web 服务?我尝试将其设置为类似于受 SSL 保护的常规 WCF 服务,但它似乎不起作用。你在Web.Config中设置了什么,你在Silverlight的ServiceReferences.ClientConfig中设置了什么?

我注意到在 Silverlight 客户端应用程序的 ServiceReferences.ClientConfig 文件中,“Binding”标签只允许 basicHttpBinding 而不允许 wsHttpBinding。这是否意味着您无法保护启用 Silverlight 的 WCF 服务?如果是,有更好的方法来保护它吗?

【问题讨论】:

    标签: wcf silverlight


    【解决方案1】:

    我配置了三个关键位置以在我自己的应用程序中使用 https。

    Web.config

    在行为标签中包含这一行:

    <serviceMetadata httpsGetEnabled="true"/>
    

    对于 MEX 端点,请确保使用 https 协议:

    <endpoint address="mex" binding="mexHttpsBinding"
              contract="IMetadataExchange" />
    

    创建自定义绑定。重要的部分是运输安全:

      <basicHttpBinding>
        <binding name="myServicesBinding">
          <security mode="Transport"/>
        </binding>
      </basicHttpBinding>
    

    您还可以包含通常的授权内容:

    <authorization>
      <allow users="?"/>
      <deny users="*"/>
    </authorization>
    

    银光

    在 Silverlight 端,将 ServiceReference 指向现在安全的服务,或者在代码中手动设置连接。 ServiceReferences.ClientConfig 文件中应该包含安全内容:

    <security mode="Transport"/>
    

    而代码版本是这样的:

    BasicHttpBinding b = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
    

    可能还有更复杂的事情可以做,但这对大多数人来说应该已经足够了。

    【讨论】:

      【解决方案2】:

      在ServiceReferences.ClientConfig文件中 “绑定”标签仅允许的 Silverlight 客户端应用程序 basicHttpBinding 而不是 wsHttpBinding。 这是否意味着您无法保护启用 Silverlight WCF 服务?

      不,不是那个意思。您可以拥有 basicHttpBinding 并仍然为其分配传输级安全性(带有 SSL 的 HTTPS)。这应该不是问题。

      马克

      PS:其中许多链接可以让您获得更多洞察力和众所周知的“啊哈!” :-)

      【讨论】:

      • 谢谢!虽然我对在托管服务的 Web.Config 文件中放置什么感到困惑?它只是具有传输安全性的 basicHttpBinding 吗?我试过了,它返回“未找到”错误。
      • 托管服务的服务器是否安装了 SSL 证书?如果您想使用 SSL 传输级别的安全性,则必须事先正确设置传输级别的 SSL。
      • 是的,该站点具有有效的 SSL,我可以使用传输安全性访问 .ASMX 服务并将其指向 Silverlight 配置文件中的 https。但是我一辈子都无法通过具有传输安全性的 https 找到启用 Silverlight 的 WFC 服务。
      • 您可以通过多种方式设置传输安全性 - 只是“传输”或“带有消息凭据的传输”,还有一种我现在忘记了。我不能 100% 确定 Silverlight 环境会期望什么 - 但基本上,您必须在通信渠道的两端进行相同的设置。
      【解决方案3】:

      要使用 SSL 创建启用 Silverlight 的 WCF Web 服务,您必须执行以下步骤:

      1. 使用 Visual Studio 2010 创建标准的启用 Silverlight 的 WCF Web 服务
      2. 修改webconfig.xml的3处:

        一个。在 serviceMetadata 中,将 httpGetEnabled 更改为 httpsGetEnabled,如下所示:

        <behaviors >
          <serviceBehaviors > 
            <behavior name="" > 
              <serviceMetadata httpsGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
        

        b.在绑定中将 httpTransport 更改为 httpsTransport:

        <bindings>
          <customBinding>
            <binding name="Project.Web.YourService.customBinding0">
              <binaryMessageEncoding/>
              <httpsTransport/>
            </binding>
          </customBinding>
        </bindings>
        

        c。在端点中将 binding="mexHttpBinding" 更改为 binding="mexHttpsBinding":

        <service name="Project.Web.YourService.YourService">
          <endpoint address="" binding="customBinding" bindingConfiguration="Project.Web.YourService.customBinding0"
          contract="Project.Web.YourService.YourService" />
          <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
        </service>
        
      3. 不要使用 ServiceReferences.ClientConfig。在后面的代码中创建所有内容 - 很容易在服务器上部署:

        CustomBinding binding = new CustomBinding(new BinaryMessageEncodingBindingElement(), new HttpsTransportBindingElement());         
        YourServiceReference.YourServiceClient service = new YourServiceReference.YourServiceClient (binding, new EndpointAddress(new Uri( "https:yourhostname/YourService.svc").AbsoluteUri));        
        service.YourMethodCompleted += new EventHandler<YourServiceReference.YourMethodCompleted EventArgs>(service_YourMethodCompleted );
        service.YourMethodAsync();
        

      【讨论】:

        【解决方案4】:

        Silverlight 不支持 WS* - 基本上将客户端配置中的 URL 更改为 https:// url - 这就是你能做的全部

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-26
          相关资源
          最近更新 更多