我在控制台应用程序和托管其操作的Web应用程序上托管了WCF服务。我搜索了WCF安全性,在大多数情况下,Web服务都托管在IIS上。在我的情况下,为了实现WCF传输层安全性,我应该遵循哪些要点?
我想要的是
如果我的WCF服务托管在控制台应用程序上。我应该制作任何IIS配置吗?
答案 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.aspx,http://www.packtpub.com/article/microsoft-wcf-security和http://dotnetrobert.com/?q=node/140。