Разница между ClientCredentialType = Windows и = Ntlm - PullRequest
8 голосов
/ 18 апреля 2009

Может ли кто-нибудь дать четкое объяснение разницы между использованием

  • clientCredentialType=Windows и
  • clientCredentialType=Ntlm

в серверном Web.config при размещении службы WCF?

У меня есть сервис SOAP 1.1 (basicHttpBinding) для взаимодействия с существующими клиентами. Он использует роли ASP.NET, поэтому требует проверки подлинности клиентов.

Когда я использую сервер VS2005 (Cassini) для размещения службы, я должен указать ClientCredentialType=Ntlm, как указано выше, и установить флажок Ntlm в свойствах проекта в VS2005. ClientCredentialType=Windows не работает - клиенты получают:

401 Несанкционированная ошибка

Однако, когда я работаю под IIS, все наоборот: ClientCredentialType=Windows работает, а ClientCredentialType=Ntlm дает сбой.

Может кто-нибудь объяснить это и, предпочтительно, предложить способ, которым у меня может быть один и тот же файл web.config для запуска службы в Cassini и IIS?

Обновление

У меня на компьютере разработчика установлен .NET 3.5 SP1, на котором работает XP SP2 в домене. Поэтому Cassini работает под учетной записью домена, а IIS 5.1 - под локальной учетной записью.

Интересно, может ли это быть связано с критическими изменениями в .NET 3.5SP1, описанными в этих статьях.

http://www.aspnetpro.com/newsletterarticle/2008/12/asp200812ab_l/asp200812ab_l.asp http://msmvps.com/blogs/alvin/archive/2008/11/14/net-3-5-sp1-breaking-change-to-wcf.aspx http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=354236

Ситуация похожа на clientCredentialType=Windows, когда сервер работает под учетной записью домена (что является моей ситуацией с Cassini - моей обычной учетной записью пользователя домена), и работает при запуске под локальной учетной записью (которая является моей ситуация с IIS).

Проблема в том, что предлагаемые исправления требуют изменений в файле конфигурации клиента WCF, но в моем случае я использую SOAP 1.1 (basicHttpBinding) с клиентами, не являющимися WCF.

1 Ответ

1 голос
/ 18 апреля 2009

clientCredentialType = Windows использует встроенную проверку подлинности Windows, которая может быть через Active Directory и NTLM.

Очевидно, что тип NTLM будет использовать только NTLM для аутентификации.

Я уверен, что вы уже видели это, но вот ссылка на безопасность WCF: http://msdn2.microsoft.com/en-us/library/ms734769.aspx

Некоторые дополнительные сведения о вашей настройке помогут. Серверы IIS и Cassini работают на одном компьютере? Если нет, у вас есть одинаковые настройки учетных записей на каждом поле? IIS6 по умолчанию поддерживает NTLM, поэтому у вас не должно возникнуть проблем с его работой.

...