Я знаю, що є тисячі повідомлень про те, що люди мають проблеми з інтегрованою автентифікацією 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 виявляється встановленою, завантаженою та виключно включеною?