在这种情况下,我希望许多客户使用https上的用户名验证来调用我的Web服务。安全性是首要任务,因此我正在考虑将wshttpbinding与消息安全性结合使用。我不知道我的想法是否正确。 问题是我已经有了可行的东西,但我不知道它是否需要改变才能获得更好的安全性。 这就是现在所做的。
<services>
<service name="myService" behaviorConfiguration="myBehavior" >
<endpoint address="" binding="basicHttpBinding" contract="myIService" bindingConfiguration="RequestUserName_BasicHttp" >
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/myService/" />
</baseAddresses>
</host>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="RequestUserName_BasicHttp">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="myvalidator, myNamespace"/>
</serviceCredentials>
所以,通过这种方式(有效)我认为我没有最好的安全性(至少我需要通过https发送请求)。我能做些什么来实现更好/最好的安全性?我尝试过使用wshttpbinding和https但我在证书方面遇到了一些问题。 开发环境是Windows XP,VS2010,IIS7.5 express。 并且有一个描述服务的类库和一个用于使用它的consoleClient应用程序...客户端有自己的app.config文件,其中有凭据(用户名和密码)。
答案 0 :(得分:0)
您已经在实施用户ID和密码验证,如果要对邮件执行加密和解密,则必须使用带有HttpsBinding或WsHttpBinding的证书。有关wcf中的身份验证和授权的更多信息,请参阅此MSDN documentation
答案 1 :(得分:0)
好的,我考虑了Ramesh Babu的回答,我改变了一点我的项目。 因此,我没有为wcf服务创建类库,而是创建了一个WCF服务应用程序(在VS2010中有这个选项)。其他所有内容保持不变,所以我创建了一个像这样的新Web.config文件
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="MyBinding">
<security mode="Message">
<message clientCredentialType="UserName"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="MyBehavior" name="myName">
<endpoint address="myService.svc" binding="wsHttpBinding"
bindingConfiguration="MyBinding"
contract="myService.ImyService" />
<endpoint address="mex" binding="mexHttpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:44400/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebugincludeExceptionDetailInFaults="true" />
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="myService.Authentication.CustomValidator, myService" />
<serviceCertificate
findValue="MyCertificate"
x509FindType="FindBySubjectName"
storeLocation="LocalMachine"
storeName="My" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="true"/>
</system.webServer>
<connectionStrings>
<add name="myEntities" connectionString="......" />
</connectionStrings>
</configuration>
所以我需要创建一个证书,我使用SelfCert创建一个证书并将其复制到TrustedPeople(在运行中键入mmc)。 在此之后,我创建了一个控制台应用程序以使用该服务,app的app.config文件是自动构建的。