保护WCF服务

时间:2011-04-29 06:02:35

标签: c# wcf wcf-security

我在控制台应用程序和托管其操作的Web应用程序上托管了WCF服务。我搜索了WCF安全性,在大多数情况下,Web服务都托管在IIS上。在我的情况下,为了实现WCF传输层安全性,我应该遵循哪些要点?

我想要的是

  1. 使用用户名和密码执行WCF操作
  2. 使用SSL加密数据。
  3. 如果我的WCF服务托管在控制台应用程序上。我应该制作任何IIS配置吗?

2 个答案:

答案 0 :(得分:3)

如果要通过HTTP公开WCF服务,可以将BasicHttpBinding与自定义配置一起使用:

<bindings>
  <basicHttpBinding>
    <binding name="secured">
      <security mode="TransportWithMessageCredential">
        <message clientCredentialType="userName" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

<behaviors>
  <serviceBehaviors>
    <behavior name="securedService">
      <serviceMetadata httpsGetEnabled="true" />
      <serviceCredentials>
        <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Namespace.Type, assembly" />
      </serviceCredentials>
    </behavior>
  </serviceBehaviors>
</behaviors>

<services>
  <service name="Namespace.Type" behaviorConfiguration="securedService">
    <host>
      <baseAddresses>
        <!-- some url -->
        <baseAddress baseAddress="https://localhost:8088/Service" />
      </baseAddresses>
    </host>
    <endpoint address="" contract="Namespace.Type" binding="basicHttpBinding" bindingConfiguration="secured" />
    <endpoint address="mex" contract="IMetadataExchange" binding="mexHttpsBinding" />
  </service>
</services>

这将使用HTTPS和UserName令牌配置文件创建SOAP 1.1服务,以便在邮件中传输凭据。它还将通过HTTPS公开元数据(WSDL),用户名和密码将由custom validator验证。默认验证可验证Windows帐户,但也可以将其重新配置为使用ASP.NET成员资格提供程序。

您需要做的最后一件事是在已使用的端口上允许HTTPS(示例中为8088)。为此,您需要在计算机上的证书存储区中安装具有私钥的证书(应位于LocalMachine中的My / Personal存储中)。您可以创建self signed certificate用于测试目的。

获得证书后,您必须使用netsh assign the certificate to the port。您还应该使用netsh allow application to listen on the port,否则您的控制台应用程序必须以管理员身份运行(UAC - Windows Vista,7,2008,2008 R2)。

答案 1 :(得分:2)

如果您的WCF服务托管在控制台应用程序中,则IIS与它们无关,因此您无需配置IIS或任何其他内容。

为了具有传输层安全性,您可以将WsHttp或NetTcp绑定与SSL结合使用。

查看http://www.dotnetspark.com/kb/1502-security-wcf--transport-level.aspxhttp://www.packtpub.com/article/microsoft-wcf-securityhttp://dotnetrobert.com/?q=node/140