Отключить приглашения для входа в мод auth sspi 1.0.4-2.2.2
что я пытаюсь сделать:
создайте домашнюю страницу в интрасети нашей компании, которая автоматически захватывает зарегистрированное имя пользователя Windows человека, просматривающего страницу без человеку предлагается ввести эти учетные данные при загрузке страницы.
В настоящее время я просто хочу, чтобы он захватил локальное имя пользователя, так как это будет некоторое время, прежде чем наши ИТ-ребята получат настройку домена. Например, прямо сейчас я бы хотел, чтобы он захватил "(PC-Name)windows.пользователь.имя " без каких-либо подсказок.
среда:
Apache 2.2.21 на Windows 7 x64 (будет на CentOS, как только он будет в производстве).
PHP 5.3.8 (VC9-ZTS).
Internet Explorer 9.0.8 x и Firefox 6.0.2 (будет беспокоиться о Chrome позже).
текущая тестовая страница - это просто PHP-скрипт, вызывающий print_r( $_SERVER ).
чтобы все было просто, каталог, в котором я тестирую это, не является VirtualHost.
шаги, которые я предпринял до сих пор:
загружено mod_sspi_1.0.4-2.2.2 из SourceForge и извлечен mod_auth_sspi.Итак, в каталог модулей Apache.
-
добавлена декларация модуля:
LoadModule sspi_auth_module modules / mod_auth_sspi.так что
-
добавлена определение каталога:
AllowOverride Нет Параметры Нет Приказ разрешить, запретить Разрешить от всех
AuthName "My Intranet" AuthType SSPI SSPIAuth On SSPIAuthoritative Off require valid-user
включена встроенная аутентификация в Firefox, перейдя в about: config и настройка сети.автоматический-ntlm-auth.trusted-uris к абсолютному URL-пути PHP-скрипта затем перезапустил Firefox.
Я еще не сделал эквивалентный шаг в IE, но я буду, как только я получу Firefox, работающий как это наш основной поддерживаемый браузер внутренне.
перезапустил Apache и попытался загрузить тестовый PHP-скрипт.
результат:
- в IE и Firefox мне предлагается ввести имя пользователя и пароль перед загрузкой страницы. Мне не нужна эта подсказка. Я хочу, чтобы имя пользователя было обнаружено автоматически без приглашения.
устранение неполадок до сих пор:
Я пробовал велоспорт через различные варианты SSPI, такие как authritative on/off и whatnot. Никакие эффекты.
приглашение больше не появляется, если я удаляю "require valid-user", но тогда имя пользователя также не передается (оно не равно NULL; просто не установлено в периоде массива).
Если я нажму " отмена "в приглашении, я получу стандартную страницу" требуется аутентификация".
Если я ввожу недопустимое имя пользователя или правильное имя пользователя, но с неправильным пароль, страница загрузится, но имя пользователя будет "(PC-Name)Guest".
Если я ввожу правильное имя пользователя / пароль, то имя пользователя отображается вместо Guest.
Как только я ввожу имя пользователя/пароль в IE или Firefox, браузер запоминает это имя пользователя на последующих загрузках страницы, пока я не очищу кэш сохраненных паролей или не перезапущу браузер.
Я провел последние 3 или около того часа в Гугле и случайных угадывание. Нулевой успех. Я нашел несколько изолированных сообщений на форуме людей, задающих этот вопрос, но либо они остались без ответа, либо предложили решения, которые я уже пробовал без успеха.
опять же, я хочу, чтобы страница загружалась без каких-либо подсказок и отображала текущее имя пользователя Windows в выводе массива $_SERVER.
насколько я могу понять, это либо: проблема конфигурации Windows, проблема конфигурации Apache, либо проблема конфигурации браузера. Кроме этого, у меня нет идей.
буду очень признателен за любую помощь вы можете предложить. Спасибо!
--Kris
2 ответов
заняло пару дней, но в конце концов я понял это сам. По-видимому, различные документы и учебники, описывающие Firefox about:config, неверны. Они утверждают, что полный URI, включая префикс протокола, должен быть включен. Как оказалось, все наоборот.
как случайный выстрел в темноте, я попытался установить его просто "localhost" (домен, на котором работает тестовый сервер). И вуаля! Это все исправило! "http://localhost", на другая рука заставила его сломаться.
как только я получил его работу в Firefox, проверив, что конфигурация на стороне сервера была правильной, применяя ее к IE и Chrome был подпругой. Для IE я просто добавил "http://localhost "(в этом случае вам нужен префикс протокола) в зону" интрасеть". И поскольку Chrome использует те же сетевые настройки, что и IE, этот шаг заставил его работать для обоих браузеров.
что касается конфигурации на стороне сервера, похоже, у меня было это с самого начала. Я смог немного упростить его, так что на самом деле все, что вам нужно в блоке каталогов, это:
AuthName "Whatever you want to call your intranet"
AuthType SSPI
SSPIAuth On
require valid-user
С этой настройкой, если вы укажете на php-скрипт, выполняющий print_r ($_SERVER), вывод будет содержать что-то вроде этого:
[REMOTE_USER] => dev-kdc-pc01\kris.craig
[AUTH_TYPE] => NTLM
[PHP_AUTH_USER] => dev-kdc-pc01\kris.craig
Если вы хотите избавиться от доменной части (т. е." dev-kdc-pc01\"), вы можете либо разобрать ее на PHP, либо добавить эту строку в свой материал SSPI в блоке каталогов в httpd.конф упомянул сверху:
SSPIOmitDomain On
обратите внимание, что я тестировал это только в системе Windows, где веб-сервер Apache работал на localhost. Я еще не тестировал его в ситуации, когда сервер Apache работает на Linux, хотя это не должно влиять на результаты, так как сервер просто принимает все, что браузер отправляет. Это также требует, чтобы клиент работал под управлением Windows или какой-либо другой среды, совместимой с SSPI. Я еще не решил, как это сделать. для наших сотрудников Mac-using.
также обратите внимание, что я успешно протестировал это в сети, которая делает не в настоящее время настроен домен. Согласно статьям, опубликованным в другом месте, поведение должно быть идентичным на рабочей станции, которая является членом домена.
надеюсь, это поможет! Спасибо!
Это может быть частичный ответ.
BOOL WINAPI GetUserName(
__out LPTSTR lpBuffer,
__inout LPDWORD lpnSize
);
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724432%28v=vs.85%29.aspx
похоже, вы можете получить системную информацию, используя это, другая половина может быть автоматизация его с помощью PERL или Python для очистки информации, а затем опубликовать его на PHP.
вот схема извлечения SysInfo в Окна.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724426%28v=vs.85%29.aspx
честно говоря, это довольно легко сделать с PECL / PAM, если вы используете Linux.