Как сказал Джошуа, вам не нужен сертификат клиента, если вы собираетесь использовать имя пользователя для аутентификации вашего клиента. В этом случае клиент передает имя пользователя и пароль, а сервер предоставляет сертификат для процесса взаимной аутентификации / рукопожатия.
Я только недавно настроил систему безопасности wcf для аналогичной системы (формы win через 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>
Надеюсь, это поможет, если у вас есть вопросы, дайте мне знать.