У меня есть служба WCF (.NET 4), размещенная в IIS (7.5 в Windows Server 2008 R2). Наш клиент (для которого мы создаем сервис) требует, чтобы все клиенты сервиса были аутентифицированы с использованием сертификатов Verisign. То есть клиент покупает сертификат у Verisign и предоставляет нам открытый ключ. Служба должна принимать запросы, которые могут быть проверены только с использованием одного из открытых ключей, которые мы получили от клиентов.
Проблема, с которой я сталкиваюсь, заключается в том, что IIS требует включения анонимной аутентификации. В противном случае «Параметры безопасности для этой службы требуют« анонимной »аутентификации, но она не включена для приложения IIS, в котором размещена эта служба». ошибка повышена Однако, если я включаю анонимную аутентификацию, любой вызов в службу, которая предоставляет любой сертификат, разрешен. Нам нужно ограничить его разрешением только тех вызовов, которые предоставляют определенные сертификаты (т.е. те, для которых нам был предоставлен открытый ключ).
В IIS нам требуются сертификаты SSL и клиента (в разделе «Настройки SSL»), и (в разделе «Аутентификация») вся аутентификация отключена (кроме анонимной).
Файл web.config:
<system.web>
<compilation debug="false" targetFramework="4.0" />
<authentication mode="Windows" />
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
<customErrors mode="Off" />
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" />
<identity impersonate="false" />
</system.web>
<system.serviceModel>
<services>
<service behaviorConfiguration="XXXServiceBehavior" name="XXXService.NewService">
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="XXXServiceBinding"
contract="XXXService.INewService"
bindingNamespace="http://XXXX.com.au/XXXService/NewService">
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="XXXXServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="PeerTrust" mapClientCertificateToWindowsAccount="true" />
</clientCertificate>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="XXXServiceBinding" maxReceivedMessageSize="1000000" maxBufferPoolSize="1000000">
<readerQuotas maxStringContentLength="1000000" />
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
Если кто-то может заставить этот сценарий работать, не могли бы вы сообщить мне, какие настройки вы используете в IIS и в вашей конфигурации?