互联网场景中的WCF安全性

时间:2010-10-04 21:40:33

标签: wcf security interop

我在Windows服务中托管了WCF服务。来自各种平台的客户端将访问该服务。现在我想添加一个基本的安全机制。理想情况下,客户端应使用用户名/密码进行身份验证。

我必须在此方案中使用哪些绑定设置以及如何验证客户端?互操作性比非常安全的解决方案更重要。如果可能,不应强迫客户使用证书或类似的东西。此外,身份验证不应与SQL Server数据库强耦合。我想手动检查客户端凭据。

感谢您的帮助

2 个答案:

答案 0 :(得分:3)

最适合您的情况可以是BasicHttpBinding,其安全性设置为TransportWithMessageCredentials,凭据类型设置为UserName。在这种情况下,您的服务将使用HTTPS进行保护(需要SSL的服务器证书,必须在客户端上受信任),并且将在消息级别使用UserName令牌配置文件(SOAP标头)提供身份验证。您可以实现自己的password validator

BasicHttpBinding配置框架:

<bindings>
  <basicHttpBinding>
    <binding name="Secured">
      <security mode="TransportWithMessageCredential">
        <message clientCredentialType="UserName" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

如果您不想使用HTTPS,可以使用HttpTransport,TextMessageEncoding创建自定义绑定,并将安全模式设置为UserNameOverTransport。但是你必须将allowInsecureTransport设置为true(请注意,在此设置中生成WSDL存​​在一些错误。)

自定义绑定配置框架:

<bindings>
  <customBinding>
    <binding name="Secured">
      <security authenticationMode="UserNameOverTransport" allowInsecureTransport="true" />
      <textMessageEncoding messageVersion="Soap11" />
      <httpTransport />
    </binding>
  </cutomBinding>
</bindings>

答案 1 :(得分:1)

有关如何实现此目的的指南,请参阅应用程序方案的Internet部分:CodePlex Application Scenarios