Действительно ли возможно установить сервис WCF с аутентификацией SSL и Стандартной аутентификацией в IIS с помощью только BasicHttpBinding-привязку? (Я не могу использовать wsHttpBinding-привязку),
Сайт размещается на IIS 7 с продолжающим набором аутентификации:
- Anonymous access: off
- Basic authentication: on
- Integrated Windows authentication: off !!
Сервисная конфигурация:
<services>
<service name="NameSpace.SomeService">
<host>
<baseAddresses>
<add baseAddress="https://hostname/SomeService/" />
</baseAddresses>
</host>
<!-- Service Endpoints -->
<endpoint address="" binding="basicHttpBinding"
bindingNamespace="http://hostname/SomeMethodName/1"
contract="NameSpace.ISomeInterfaceService"
name="Default"
/>
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpsGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
<exceptionShielding/>
</behavior>
</serviceBehaviors>
</behaviors>
Я попробовал 2 типа привязки с двумя различными ошибками:
1 - Ошибка IIS: 'Не удалось найти базовый адрес, который соответствует схеме http для конечной точки с привязкой BasicHttpBinding. Зарегистрированные схемы базового адреса [https].
<bindings>
<basicHttpBinding>
<binding>
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
2 - Ошибка IIS: Настройки безопасности для этого сервиса требуют 'Анонимной' Аутентификации, но это не включено для приложения IIS, которое размещает этот сервис.
<bindings>
<basicHttpBinding>
<binding>
<security mode="Transport">
<transport clientCredentialType="Basic"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
Кто-то знает, как настроить это правильно? (если возможный?)
После некоторого копания и задавания вопросов нескольким коллегам мы, наконец, решили проблему.
Важно понимать, что в данном случае есть 2 аспекта безопасности. Безопасность IIS и безопасность WCF.
Безопасность IIS: Включите SSL и включите базовую аутентификацию. Отключите анонимную аутентификацию. (Конечно, создайте учетную запись/группу windows и установите разрешения на ваше приложение в IIS.)
Безопасность WCF: Поскольку привязка является только BasicHttpBinding, службе не требуется ничего проверять. За это отвечает IIS.
Конфигурация привязки службы:
<bindings>
<basicHttpBinding>
<binding>
<security mode="Transport">
<transport clientCredentialType="Basic" />
</security>
</binding>
</basicHttpBinding>
И, наконец, чтобы решить первую ошибку, мы удалили конечную точку mex. Эта конечная точка требует привязки HTTP.
Удалено:
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>