正如 Joshua 所说,如果您要使用用户名来验证您的客户端,则不需要客户端证书。在这种情况下,客户端传递用户名和密码,服务器提供证书用于相互认证/握手过程。
我最近刚刚为一个类似的系统设置了一个 wcf 安全系统(通过 www 赢得表格),我使用了CodePlex的指导,它提供了一个分步检查列表,以帮助确保你准备好一切。您不必遵循每一步,例如我们没有使用角色功能,但我们使用的是会员商店。
下面是使用用户名和服务器证书使用 wsHttpBinding 进行设置/配置的简要总结:
客户端配置:
<security mode="Message">
<message clientCredentialType="UserName" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="false" />
</security>
在代理上设置的用户名密码:
'ClientCredentials added to service call for authentication
objServiceClient.ClientCredentials.UserName.UserName = MyAppContext.Username
objServiceClient.ClientCredentials.UserName.Password = MyAppContext.Password
服务器配置:
捆绑:
<wsHttpBinding>
<binding name="MyApp.wsHttpBindingMessageUname">
<security mode="Message">
<message clientCredentialType="UserName" negotiateServiceCredential="true"
establishSecurityContext="false" />
</security>
</binding>
</wsHttpBinding>
行为:
<serviceBehaviors>
<behavior name="MyApp.DefaultServiceBehavior">
<serviceCredentials>
<serviceCertificate findValue="localhost" storeLocation="LocalMachine"
storeName="My" x509FindType="FindBySubjectName" />
<userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
membershipProviderName="AspNetSqlMembershipProvider" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
希望对您有所帮助,如果您有任何问题,请告诉我。