Как я могу использовать WCF только с базовыми атрибутами, SSL и базовой аутентификацией в IIS?
Возможно ли установить службу WCF с использованием SSL и базовой проверки подлинности в IIS с использованием только привязки BasicHttpBinding? (Я не могу использовать привязку wsHttpBinding)
Сайт размещен на IIS 7 со следующей настройкой аутентификации:
- Anonymous access: off
- Basic authentication: on
- Integrated Windows authentication: off !!
Service Config:
<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>
Кто-нибудь знает, как правильно настроить это? (если возможно?)
Ответы
Ответ 1
После некоторого рытья и задавая несколько вопросов нескольким коллегам, мы, наконец, решили проблему.
Важно понимать, что в этом случае есть два аспекта безопасности. Безопасность IIS и безопасность WCF.
Безопасность IIS: Включить SSL и включить базовую аутентификацию. Отключить анонимную аутентификацию.
(Конечно, создайте учетную запись/группу Windows и установите разрешения для вашего приложения в IIS.)
Безопасность WCF. Поскольку привязка - это только базовая привязка, служба не требует ничего действительного. IIS несет ответственность за это.
Конфигурация привязки службы:
<bindings>
<basicHttpBinding>
<binding>
<security mode="Transport">
<transport clientCredentialType="Basic" />
</security>
</binding>
</basicHttpBinding>
И, наконец, чтобы разрешить первую ошибку, мы удалили конечную точку mex. Эта конечная точка требует связывания HTTP.
Удалено:
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>