Усунення проблем із автентифікацією Windows (без викликів) у IIS 7.5?


21

Я знаю, що є тисячі повідомлень про те, що люди мають проблеми з інтегрованою автентифікацією Windows для роботи з IIS, але всі вони, схоже, призводять до веб-сторінок, які не застосовуються, або до рішень, які я вже намагався. Раніше я розгортав десятки подібних сайтів, тому або з сервером / конфігурацією відбувається щось химерне, або я занадто довго дивився на це і не бачив очевидного.

Простіше кажучи, все працює чудово на моїй локальній машині, але розпадається на виробничому сервері, який, наскільки я можу сказати, має точно таку ж конфігурацію .

На локальній машині:

  • На апараті працює Windows 7 Ultimate, Service Pack 1, IIS 7.5.
  • Сайт був успішно протестований, використовуючи як IIS, так і сервер веб-розробки VS.
  • На конфігурації сайту IIS вимкнено всі методи аутентифікації, крім Windows Authentication.
  • Місцева машина не має жодного домену.
  • Надані Постачальники - це переговори та NTLM (не переговори: Kerberos).
  • Розширений захист вимкнено.
  • Усі перевірені браузери (IE, Firefox, Chrome) показують підказку про виклик і дозволяють мені увійти в домен localhost за допомогою мого (локального) облікового запису Windows.
  • Усі перевірені браузери також працюють з використанням непрозорої локальної IP-адреси - тому самі браузери, мабуть, не хвилюються, чи з’являється сайт "локальним" чи "віддаленим".
  • На веб-сторінку я додав рядок відображення, де відображається користувач, який увійшов на даний момент, і він показує саме те, що я очікував (залежно від того, хто з місцевих користувачів я входив).

На віддаленій машині:

  • На сервері працює Windows Server 2008 R2, IIS 7.5.
  • Завантаження веб-сторінки призводить до негайної помилки 401.2: Ви не маєте права переглядати цю сторінку через недійсні заголовки аутентифікації. Жодного запиту на виклик не з’являється.
  • На конфігурації сайту IIS вимкнено всі методи аутентифікації, крім Windows Authentication.
  • Віддалену машину немає на будь-якому домені.
  • Надані Постачальники - це переговори та NTLM (не переговори: Kerberos).
  • Розширений захист вимкнено.
  • На віддаленій машині (сеанс віддаленого робочого столу) така ж помилка з’являється в Internet Explorer незалежно від того, домен є localhost чи зовнішньою IP-адресою.
  • Якщо я спробую переглянути віддалений веб-сайт з моєї локальної машини, помилка все ще 401, але трохи інша 401. Ні підкоду, з текстом: В доступі заборонено через недійсні облікові дані.
  • Перевірка справжності Windows функція ролі IIS буде встановлена.
  • WindowsAuthentication модуль буде доданий (на рівні сервера).
  • Точно така ж помилка виникає, якщо я вимкну автентифікацію Windows і ввімкнув базову автентифікацію.
  • Сайт робить завантаження , якщо відключити перевірку автентичності Windows і включити анонімний (очевидно).
  • Я вже дотримувався всіх кроків усунення несправностей у службі підтримки Microsoft: Усунення помилок HTTP 401 в IIS
  • Я вже спробував вирішити цю проблему, показану на іншій сторінці підтримки Microsoft (нібито для використання NTLM як єдиного методу).

І останнє, але не менш важливе, я спробував увімкнути FREB за 401.2 помилок, і результати, здається, не підказують мені нічого корисного, я бачу лише таке попередження:

MODULE_SET_RESPONSE_ERROR_STATUS

ModuleName IIS
Повідомлення веб-ядра 2
HttpStatus 401
HttpReason Несанкціоноване
HttpSubStatus 2
ErrorCode 2147942405
ConfigExceptionInfo
Повідомлення AUTHENTICATE_REQUEST
ErrorCode Доступ заборонено. (0x80070005)

... це, здається, просто говорить мені про те, що я вже знаю (що це просто відхилення запиту, а не проведення переговорів щодо повноважень).

Трасування вказує на те, що модуль WindowsAuthentication правильно завантажений, оскільки є NOTIFY_MODULE_STARTрядок з ModuleName= WindowsAuthentication(та різними іншими подальшими подіями ASP.NET - [un], на щастя, тут немає ніяких цікавих помилок чи попереджень).

Хто-небудь може сказати мені, що я можу тут пропустити?


Швидке оновлення:

Мені трохи незручно надсилати цілий дамп Wireshark, оскільки він би виявив IP-адреси, URL-адреси та інші речі, але я здійснив побічне порівняння відповідей HTTP від ​​localhost та віддаленого сервера у Fiddler, і це здається досить самостійним -очевидно, в чому проблема:

Localhost:

HTTP / 1.1 401 Несанкціоновано
Кеш-контроль: приватний
Тип вмісту: текст / html; charset = utf-8
Сервер: Microsoft-IIS / 7.5
WWW-автентифікат: ведіть переговори
WWW-автентифікат: NTLM
X-Powered by: ASP.NET
Дата: Сб, 17 грудня 2011 23:42:34 GMT
Довжина вмісту: 6399
Підтримка проксі: аутентифікація на основі сесії

Віддалене:

HTTP / 1.1 401 Несанкціоновано
Тип вмісту: текст / html
Сервер: Microsoft-IIS / 7.5
X-Powered by: ASP.NET
Дата: Сб, 17 грудня 2011 23:43:13 GMT
Довжина вмісту: 1293

Крім кількох, здавалося б, непослідовних відмінностей, таких як кеш-контроль, головна відмінність полягає в тому, що віддалений сервер не відправляє заголовки WWW-Authenticate назад клієнту.

Отже, я думаю, що це звужує питання до: Чому IIS не надсилає заголовки WWW-Authenticate, коли автентифікація Windows виявляється встановленою, завантаженою та виключно включеною?


Ви хочете зафіксувати простий текст проби автентифікації (спочатку змініть свій пароль на щось, що викидається - ми не хочемо, щоб ваші справжні хеши паролів в мережі)? 18 місяців або більше назад патч Windows вніс деякі зміни в узгодження HTTP NTLM (до речі, системи виправлені повністю?), Що підірвало додаток постачальника і дало мені більше досвіду, ніж я хочу визнати, аналізуючи переговорні розмови.
Шейн Медден

@ShaneMadden: Я зважаю на всі різні шматочки інформації, яку я б викрив, але я можу зробити сесію Fiddler, яка повинна бути майже однаковою, і тоді я можу хоча б анонімізувати IP-адреси і так далі - і насправді я вже робив, результати повинні бути досить зрозумілими (клієнт не відображає запит на підтвердження облікових даних, оскільки сервер не вимагає).
Aaronaught

О, цікаво, хтось, здається, повідомив про цю проблему і в Stack Overflow - на жаль, відповідей там немає.
Aaronaught

@Aaronaught Як тут ви отримали інше ім’я користувача, ніж на Cooking? Коли я вперше побачив це питання, я подумав, що хтось вас обманює.
Уорд - Відновити Моніку

@Ward: Будь-хто може редагувати своє ім’я користувача, це частина профілю. Це був мій оригінальний, використовуйте лише інші на нетехнологічних сайтах.
Aaronaught

Відповіді:


14

Проблема вирішена. Нарешті я вирішив порівняти список модулів поруч, і насправді один був відсутній. Виявляється, є два модулі автентифікації Windows:

Список модулів

На сервері керований WindowsAuthenticationмодуль був там, але не рідний, WindowsAuthenticationModuleвиділений вище. Чому це було налаштовано таким чином, хтось здогадується, але, мабуть, якщо рідний модуль не завантажений, керований модуль бадьоро завантажиться і мовчки вийде з ладу.

Тому для будь-яких майбутніх читачів, які зіткнулися з цією проблемою, переконайтеся, що ви завантажили обидва модулі , оскільки IIS не попередить вас, якщо один з них відсутній.


Керований модуль WindowsAuthentication - це не те, що звучить. Це підтримка ідентифікацій Windows в ASP.Net, і вона завжди встановлюється (коли встановлено ASP.Net). Але власний модуль автентифікації Windows - це те, що встановлюється, коли ви поставите галочку компоненту Windows Auth в Менеджері серверів, і це те, що вам потрібно для того, щоб ця опція аутентифікації стала видимою в графічному інтерфейсі аутентифікації.
TristanK

@TristanK: У цьому випадку цей компонент був відмічений, але модуль не був встановлений. (Однак параметр був видимий у графічному інтерфейсі аутентифікації - тому я майже впевнений, що екран залежить від керованого модуля, а не від рідного.)
Aaronaught

Я думаю, що це може статися таким чином через деяке підробка файлів конфігурації (можливо, ApplicationHost.config). Але я думаю, це не має значення, як це все вийшло з удару; це було.
Aaronaught

Ну, чітко. Windows Auth не працює, якщо щось не відбудеться; в цьому випадку, хоча запитання констатує, що конфігурація однакова, це виявляється неправдивим; так що це не працювало так само. QED.
TristanK

1
Цей зниклий випуск модуля просто покусав мене в Windows Server 2012 R2. Неймовірно, що немає жодної ознаки, коли виникає цей стан. У будь-якому випадку, велике спасибі за цю відповідь; Я буквально рвав волосся!
Роб Девіс

4

Ми виявили, що це не обов'язково вирішує проблему для розробників, які працюють локально на сайтах ASP.NET, які працюють під автентифікацією Windows. Ми знайшли злом реєстру, який вимикає перевірку циклу; це виправлено: -

ключ реєстру - HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa

Створіть DWORD зі значенням 1 під назвою "DisableLoopbackCheck"

Вам доведеться перезавантажити машину, щоб налаштування набули чинності


Я виявив, що я міг перемикатися між DisableLoopbackCheck 1 і 0, і зміна набуде чинності негайно. Крім того, ви можете бачити ідентифікатор події 4625 у журналі безпеки подій із повідомленням "Обліковий запис не ввійшов".
alastairtree

Дякую! 2 дні роботи з автентифікацією IIS та версіями .Net лише для того, щоб знайти це, тому що я використовував свій файл хостів, щоб створити фіктивний запис DNS під час тестування міграції сайту.
JohnLBevan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.