Проверка подлинности WCF и Windows не работает

Я не могу получить службу WCF для проверки подлинности Windows

Если разрешаю анонимно, все работает, ошибок нет.

Я запускаю .Net 3.5 на Windows 2008 R2 Standard SP1 IIS 7.5, если это имеет значение VS 2010

Я использовал редактор конфигурации службы WCF, чтобы попытаться проверить, что я делаю, но все равно не повезло

Я получаю сообщение об ошибке после приличного ожидания 20-30 секунд

Security settings for this service require 'Anonymous' Authentication but it is not enabled for the IIS application that hosts this service. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NotSupportedException: Security settings for this service require 'Anonymous' Authentication but it is not enabled for the IIS application that hosts this service.

мой web.config

  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

    <bindings>
      <basicHttpBinding>
        <binding name="AmjBasicHttpEndpointBinding">
          <security mode="None">
            <transport clientCredentialType="Windows" />
          </security>
        </binding>
      </basicHttpBinding>

    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="SMS.Services.BEIMBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="SMS.Services.BEIMBehavior" name="SMS.Services.BEIM">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="AmjBasicHttpEndpointBinding"
          name="BeimServices" contract="SMS.Services.IBEIM">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>

  </system.serviceModel>

ИЗМЕНИТЬ сообщение об ошибке находится на веб-странице. http://Servername/Directory/pageName.svc


person Amjid Qureshi    schedule 11.07.2011    source источник


Ответы (4)


Что ж, получается:

Параметры безопасности для этой службы требуют «анонимной» аутентификации, но она не включена для приложения IIS, в котором размещена эта служба.

Внимательно прочтите сообщение, и вы увидите, что вам нужно включить анонимную аутентификацию для приложения IIS, в котором размещена служба. (В конфигурации IIS).

person Kieren Johnstone    schedule 11.07.2011
comment
да, но мне нужно, чтобы это была только авторизация в Windows, а не анонимная - person Amjid Qureshi; 11.07.2011
comment
Зачем тогда использовать <security mode="None">? Попробуйте <security mode="Transport"> - person Kieren Johnstone; 11.07.2011
comment
это был я, в конечном итоге использовал TransportCredentialOnly - person Amjid Qureshi; 12.07.2011

Безопасность транспорта WCF для конечных точек HTTP, размещенных в IIS, требует, чтобы на вашем хостинге применялись те же параметры безопасности. Перейдите в диспетчер IIS и настройте аутентификацию для своего хостингового приложения на аутентификацию Windows и отключите другие режимы аутентификации.

Как указал @Kieren в комментарии, вы установили режим безопасности None. Итак, вы говорите своей службе, что не хотите никакой безопасности. Вы должны изменить его на Transport, но для этого также потребуется HTTPS вместо конечной точки HTTP. Если вы настаиваете на HTTP и вас устраивает передача токена безопасности по незащищенному каналу, вам следует изменить его на TransportCredentialOnly.

person Ladislav Mrnka    schedule 11.07.2011
comment
ywh Я уже сделал это, как только я меняю его на Windows auth, я получаю сообщение об ошибке - person Amjid Qureshi; 11.07.2011
comment
Попробуйте прокомментировать конечную точку mex и убедиться, что в IIS включена только проверка подлинности Windows для вашего сайта. - person Ladislav Mrnka; 12.07.2011
comment
дал вам один, потому что вы указали TransportCredentialOnly - person Amjid Qureshi; 12.07.2011

Вы меняли конфигурацию для своей клиентской стороны? Ваша клиентская сторона должна использовать тот же механизм безопасности. И убедитесь, что ваши учетные данные Windows были переданы на сервер.

person Jack    schedule 11.07.2011
comment
сообщение об ошибке находится на веб-странице. Servername / Directory / pageName.svc У клиента такое же сообщение - person Amjid Qureshi; 11.07.2011

Я разместил WCF в IIS7 на моем ноутбуке с Win7. WCF использовал SSL и только базовую аутентификацию, и все работало. Я перенес точно такой же wcf в IIS7 на другом компьютере с Win server 2008 R2, и я получил ту же ошибку, что и сообщение здесь. Решением было прокомментировать конечную точку mex, и теперь все работает. Спасибо вам всем.

person user1705714    schedule 05.11.2012