Отключить запросы входа в систему в mod_auth_sspi_1.0.4-2.2.2 - PullRequest
8 голосов
/ 06 декабря 2011

Что я пытаюсь сделать:

  • Создайте домашнюю страницу в интрасети нашей компании, которая автоматически захватывает вошедшее в Windows имя пользователя, просматривающего страницу без человек, которому предлагается ввести эти учетные данные при загрузке страницы.

  • В настоящее время я просто хочу, чтобы он захватил локальное имя пользователя, поскольку пройдет некоторое время, прежде чем наши ИТ-специалистыполучить настройки домена.Например, прямо сейчас я бы хотел, чтобы он захватывал «(имя ПК) \ windows.user.name» без каких-либо запросов.

Среда:

  • Apache 2.2.21 в Windows 7 x64 (будет в CentOS после его выпуска).

  • PHP 5.3.8 (VC9-ZTS).

  • Internet Explorer 9.0.8x и Firefox 6.0.2 (будет беспокоиться о Chrome позже).

  • Текущая тестовая страница - это всего лишь PHP-скрипт, вызывающий print_r ($ _SERVER).

  • Для простоты каталог, на котором я тестирую, не является VirtualHost.

Шаги, которые я имеюдо сих пор:

  • Загружен mod_sspi_1.0.4-2.2.2 из SourceForge и извлечен mod_auth_sspi.so в каталог модулей Apache.

  • Добавленообъявление модуля:

    LoadModule sspi_auth_module modules / mod_auth_sspi.so

  • Добавлено определение каталога:

    AllowOverride Нет Параметры Нет Порядок allow, deny Allow from all

    AuthName "My Intranet"
    AuthType SSPI
    SSPIAuth On
    SSPIAuthoritative Off
    
    require valid-user
    

  • Включил встроенную аутентификацию в Firefox, перейдя по адресу: config и настройка network.automatic-ntlm-auth.trusted-перешли к абсолютному URL-пути PHP-скрипта, а затем перезапустили Firefox.

  • Я еще не сделал эквивалентного шага в IE, но сделаю это, как только Firefox заработает, так как это наша основная поддерживаемая поддержка.внутренний браузер.

  • Перезапустил Apache и попытался загрузить тестовый скрипт PHP.

Результат:

  • Как в IE, так и в Firefox мне предлагают ввести имя пользователя и пароль перед загрузкой страницы.Я не хочу этого приглашения.Я хочу, чтобы имя пользователя определялось автоматически без запроса.

Устранение неполадок на данный момент:

  • Я пробовал циклически переключаться между различными параметрами SSPI, такими какаутентификация вкл / выкл и еще много чего.Без эффекта.

  • Запрос больше не появляется, если я удаляю «require valid-user», но имя пользователя также не передается (оно не равно NULL; просто не задается впериод массива).

  • Если я нажму "Отмена" в приглашении, я получу стандартную страницу "Требуется аутентификация".

  • Если явведите неверное имя пользователя или правильное имя пользователя, но с неверным паролем, страница загрузится, но имя пользователя будет «(имя ПК) \ Гость».

  • Если я введуправильное имя пользователя / пароль, вместо имени гостя отображается имя пользователя.

  • Как только я ввожу имя пользователя / пароль в IE или Firefox, браузер запоминает это имя пользователя на последующих страницах, пока я не очищаюсохраненные пароли кэшируются или перезапускаются в браузере.

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

Опять же, я хочудля загрузки страницы, БЕЗ каких-либо подсказок и отображения текущего имени пользователя Windows в выводе массива $ _SERVER.

Насколько я понимаю, это либо: проблема конфигурации Windows, Apacheпроблема конфигурации или проблема конфигурации браузера.Кроме этого, у меня нет идей.

Я был бы очень признателен за любую помощь, которую вы можете предложить.Спасибо!

- Крис

Ответы [ 2 ]

7 голосов
/ 08 декабря 2011

Прошло пару дней, но я со временем все понял сам. Очевидно, что различные документы и учебные пособия, описывающие Firefox о настройке конфигурации, неверны. Они утверждают, что должен быть включен полный 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.conf упомянуто выше:

SSPIOmitDomain On

Обратите внимание, что я проверял это только в системе Windows, где веб-сервер Apache работал на localhost. Я еще не тестировал его в ситуации, когда сервер Apache работает в Linux, хотя это не должно влиять на результаты, поскольку сервер просто принимает то, что отправляет браузер. Это также требует, чтобы клиент работал под управлением Windows или какой-либо другой SSPI-совместимой среды. Я еще не определил, как заставить это работать для наших сотрудников, использующих Mac.

Также обратите внимание, что я успешно проверил это в сети, в которой не в настоящее время настроен домен. Согласно статьям, опубликованным в другом месте, поведение должно быть идентичным на рабочей станции, которая является членом домена.

Надеюсь, это поможет! Спасибо!

0 голосов
/ 08 декабря 2011

Это может быть частичный ответ.

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 в Windows.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724426%28v=vs.85%29.aspx

Честно говоря, это довольно легко сделать с PECL / PAM, если вы используете Linux.

...