Полагаю, вы хотите использовать HTTPS, который обеспечит шифрование и подпись на транспортном уровне. Сначала необходимо настроить IIS7.5 с сертификатом SSL и разрешить https в приложении, в котором размещается служба. Отметьте этот учебник , но вы будете использовать свой существующий сертификат вместо создания собственной подписи. Ваш сертификат должен быть создан для заголовка узла вашего сайта (например, mydomain.com) или для имени вашего сервера, если он выставлен напрямую.
В вашем сервисе вам нужна базовая привязка по протоколу HTTP с защитой транспорта и учетными данными для аутентификации.
<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" userNamePasswordValidator="..." />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="..." behaviorConfiguration="securedService">
<endpoint address="" contract="..." binding="basicHttpBinding" bindingConfiguration="secured" />
<endpoint address="mex" contract="IMetadataExchange" binding="mexHttpsBinding" />
</service>
</services>
Клиент будет использовать аналогичные настройки:
<bindings>
<basicHttpBinding>
<binding name="secured">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint name="..." address="https://..." contract="..." binding="basicHttpBinding" bindingConfiguration="secured" />
</client>
Эта конфигурация определяет службу SOAP 1.1, соответствующую защищенному протоколу HTTPS и защищенному именем пользователя и паролем. Сервис также предоставляет свои метаданные (WSDL) через HTTPS. Имя пользователя и пароль проверяются с помощью специального средства проверки пароля (вам нужно внедрить один ).
Вы будете устанавливать учетные данные на клиенте (сгенерированные путем добавления ссылки на услугу):
var client = new MyServiceClient();
client.ClientCredentials.UserName.UserName = "Name";
client.CleintCredentials.UserName.Password = "Password";
Шифрование сообщения выполняется на транспортном уровне. Учетные данные должны быть настроены каждый раз, когда вы создаете новый прокси, но они повторно используются для всех вызовов от прокси.
WsHttpBinding, вероятно, не требуется для вашего сценария. Настройка ProtectionLevel
предназначена только для защиты на уровне сообщений - я думаю, что это не то, что вы ищете.
Не используйте пользовательскую аутентификацию, которую вы описали:
Схема аутентификации проверит
пользователь / передать в первый раз
аутентификация. Затем с тех пор
клиент будет использовать случайно сгенерированный
вместо этого используйте код для аутентификации.
Это намного сложнее. Вы либо накатите свое собственное решение, которое будет нестандартным, либо будете использовать встроенную реализацию WCF (безопасный диалог), но не каждый клиентский стек SOAP может использовать такую услугу (это полностью зависит от расширенной безопасности сообщений).