我在Windows服务中托管了WCF服务。来自各种平台的客户端将访问该服务。现在我想添加一个基本的安全机制。理想情况下,客户端应使用用户名/密码进行身份验证。
我必须在此方案中使用哪些绑定设置以及如何验证客户端?互操作性比非常安全的解决方案更重要。如果可能,不应强迫客户使用证书或类似的东西。此外,身份验证不应与SQL Server数据库强耦合。我想手动检查客户端凭据。
感谢您的帮助
答案 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