Встроенная проверка подлинности Windows в WCF на IIS 6.0 - PullRequest
2 голосов
/ 27 мая 2009

Мне нужно реализовать встроенную аутентификацию Windows для службы WCF, размещенной на IIS 6.0 (Windows Server 2003) без сертификатов . Требуется просто аутентифицировать учетные данные Windows пользователей в определенной группе Active Directory, когда они обращаются к службе. Используемая версия платформы - 3.0.

Конфигурация WCF:

Ниже приведена часть «привязок» файла web.config для службы:

<bindings>
<basicHttpBinding>
<binding name="Binding1">
    <security mode="TransportCredentialOnly">
    <transport clientCredentialType="Windows" />
    </security>
</binding>
</basicHttpBinding>

</bindings>

Существует нет конечная точка "mex".

Несмотря на то, что в настройках безопасности виртуального каталога и файла .svc в IIS выбрана «Интегрированная проверка подлинности Windows», при переходе к файлу .svc происходит следующая ошибка:

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

Ниже приведены другие подробности хостинга услуги:

  • Служба работает в отдельном пуле приложений
  • Пул приложений работает под отдельной привилегированной учетной записью, настроенной на вкладке «Идентификация» в пуле приложений.

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

Ответы [ 4 ]

6 голосов
/ 11 сентября 2009

После некоторого копания я наконец обнаружил, что это работает, если вы измените «Windows» на «Ntlm». Я никогда не мог заставить его работать с Kerberos, но вы упоминаете, что не хотите использовать сертификаты в любом случае.

Если у вас все еще возникают проблемы, вы можете посмотреть, что находится в метабазе IIS для рассматриваемого сайта в разделе NTAuthenticationProviders. Если вы хотите использовать только Ntlm, вам нужно установить для этой строки просто «NTLM», и вам нужно убедиться, что в вашем транспортном clientCredentialType указано «Ntlm», а не «Windows», иначе вы получите исключение. Вы цитировали в своем оригинальном сообщении.

И наоборот, если кто-то сталкивается с этой ошибкой и ХОЧЕТ использовать сертификаты Kerberos, если таковые имеются, он должен проверить, говорит ли метабаза NTAuthenticationProviders «Negotiate, NTLM». Это значение по умолчанию, но для меня таинственно отличается на виртуальной машине, на которой я пытался запустить службу WCF сегодня (что в итоге привело меня к этой теме!)

4 голосов
/ 27 мая 2009

Из моего опыта работы с WCF довольно сложно правильно все настроить - много проб и ошибок! Однако я нашел следующую ссылку чрезвычайно полезной, поскольку она предоставляет контрольные списки для различных сценариев: CodePlex - Руководство по безопасности WCF и основной раздел WCF: Безопасность WCF .

Я прошел контрольный список для своего сценария приложения, и проблемы были устранены. Надеюсь, это поможет!

0 голосов
/ 12 марта 2012

NTLM не работает так же, как Windows. Если вы действительно хотите Windows, просто удалите фрагмент кода, который говорит

bindingConfiguration="your_basicHttpBinding_binding_name"

от конечной точки. Это должно работать.

0 голосов
/ 27 мая 2009

Убедитесь, что вы сняли флажок «Включить анонимный доступ».

Может быть, вы можете попробовать принудительно установить аутентификацию NTML, если к вашему делу применимо любое из них

  • вы изолируете веб-сайты на уровне виртуального каталога путем настройки работника процесс идентичности как разные доменные учетные записи.

  • вы используете встроенную проверку подлинности Windows, не используете WINS или DNS-имя для сервера, на котором запущен IIS, и вы хотите использовать учетную запись локального пользователя или учетную запись LocalService в качестве удостоверения рабочего процесса.

см .: http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/524404dc-8586-46b0-89ac-0f5db6d33c9c.mspx?mfr=true

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...