WCF – проверка подлинности Windows – для настроек безопасности требуется анонимный доступ

StackOverflow https://stackoverflow.com/questions/1026855

  •  06-07-2019
  •  | 
  •  

Вопрос

Я изо всех сил пытаюсь запустить службу WCF в IIS на нашем сервере.После развертывания я получаю сообщение об ошибке:

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

Я хочу использовать аутентификацию Windows, поэтому у меня отключен анонимный доступ.Также обратите внимание, что существует aspNetCompatibilityEnabled (если это имеет значение).

Вот мой web.config:

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <bindings>
        <webHttpBinding>
            <binding name="default">
                <security mode="TransportCredentialOnly">
                    <transport clientCredentialType="Windows" proxyCredentialType="Windows"/>
                </security>
            </binding>
        </webHttpBinding>
    </bindings>
    <behaviors>
        <endpointBehaviors>
            <behavior name="AspNetAjaxBehavior">
                <enableWebScript />
                <webHttp />
            </behavior>
        </endpointBehaviors>
        <serviceBehaviors>
            <behavior name="defaultServiceBehavior">
                <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
                <serviceDebug includeExceptionDetailInFaults="true" />
                <serviceAuthorization principalPermissionMode="UseWindowsGroups" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <services>
        <service name="xxx.Web.Services.RequestService" behaviorConfiguration="defaultServiceBehavior">
            <endpoint behaviorConfiguration="AspNetAjaxBehavior" binding="webHttpBinding"
             contract="xxx.Web.Services.IRequestService" bindingConfiguration="default">
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint>
        </service>
    </services>
</system.serviceModel>

Я искал по всему Интернету, но безуспешно.Любые подсказки очень ценятся.

Это было полезно?

Решение

Так что это кажется довольно распространенной проблемой. Смысл в том, чтобы удалить mex из ваших привязок:

<endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint>

В качестве альтернативы вы включаете анонимный доступ в IIS и в своем файле web.config убедитесь, что анонимный доступ запрещен.

Надеюсь, это поможет другой душе. (Я был на 100% уверен, что попробовал его с удаленным мексом.: -O)

Другие советы

Вы можете проверить этот один . Мне удалось заставить его работать как положено.

<configuration>
  ...
  <system.serviceModel>
    ...
    <bindings>
      <basicHttpBinding>
        <binding>
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    ...
  </system.serviceModel>
  ...
</configuration>

просто используйте привязки сервисов для mex.

Так что измените свой текущий конфиг:

<endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint>

до

<endpoint address="mex" binding="webHttpBinding" bindingConfiguration="default" name="mex" contract="IMetadataExchange"></endpoint>

Это должно решить проблему

Анонимная аутентификация может, и в некоторых случаях должна быть включена для службы, но не для сайта.

Поэтому убедитесь, что ваш сайт имеет " root " проверка подлинности включает только проверку подлинности Windows. Затем разверните свой сайт, выберите папку «service» и убедитесь, что в вашей службе включена Windows и анонимная аутентификация.

У меня была идентичная среда, в которой это работало, единственная разница в этих средах заключалась в аутентификации службы. В моем случае проблема заключалась не в выбранных провайдерах (Ntlm или Negotiate), а в настройках аутентификации для сайта и службы.

По крайней мере, у меня было идентичное сообщение об ошибке на базовом веб-сайте MSSQL Master Data Services & amp; сервис, и это было решением. Я получил ошибку при запуске только службы, но сайт работал почти нормально, MDS Explorer не работал, потому что настройки проверки подлинности службы сначала были неверными. Причиной этой неправильной конфигурации может быть ошибка в MDS Configuration Manager при создании нового сайта MDS?

Таким образом, в моем случае проблему не удалось решить путем какого-либо специального редактирования файлов web.config или ApplicationHost.config, я не редактировал файлы конфигурации. Просто выбрал правильные настройки аутентификации для веб-сайта и его службы в диспетчере IIS. Я не уверен, что здесь дело обстоит именно так, но, может быть, стоит попробовать?

Это сработало для меня, когда я удаляю конечную точку 'mex' и также устанавливаю clientCredentialType = 'Ntlm' Я размещал свой WCF в SharePoint.

Да, похоже, вам нужно полностью удалить конечную точку mex. Настройка

<serviceMetadata httpGetEnabled="false"/>

один не работал. Спасибо!

Дополнительное решение:

Вам просто нужно убедиться, что название Сервиса и контракт верны.

Надеюсь, это поможет каким-то образом.

Похоже, эта проблема с привязкой MEX была исправлена ​​в .NET 4.0.Изменение версии .NET CLR нашего сервера с 2.0 на 4.0 устранило проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top