Аутентификация Kerberos в PHP - PullRequest
       49

Аутентификация Kerberos в PHP

13 голосов
/ 23 декабря 2008

Давайте просто предположим, что я немного знаю о Kerberos - только основы.

У меня есть ...

  • Веб-сервер Debian Linux 2.6
    • Apache 2.2
      • mod_auth_kerb / 5.3
      • PHP / 5,2
  • (работающий) Kerberos Realm
  • Клиент Windows
    • Firefox 3
    • зарегистрированный идентификатор «user@EXAMPLE.COM» в MIT Network Identity Manager

Как я могу использовать эту информацию в PHP-скрипте, чтобы мне не нужно было заходить на сайт, если у посетителя есть такой билет на Kerberos? Я не хочу, чтобы Apache обрабатывал аутентификацию. Мне нужно выяснить, какой пользователь обращается к сайту через PHP.

Возможно ли это? Если так: как?

Что я обнаружил до сих пор: мне нужно «включить» домен в Firefox .

Однако вот и все ...

Ответы [ 2 ]

4 голосов
/ 24 декабря 2008

Я не уверен, поможет ли это, но похоже, что Apache отправит PHP информацию об имени пользователя с пакетом modauthkerb , если вы используете параметр KrbSaveCredentials. Вы должны получить две глобальные переменные в php:

 $_SERVER['REMOTE_USER']
 $_SERVER['KRB5CCNAME']

http://archives.postgresql.org/pgsql-admin/2004-08/msg00144.php похоже, у них это работает.

Таким образом, если вы видите, что пользователь, на самом деле не требуется, чтобы php действительно выполнял аутентификацию.

2 голосов
/ 18 октября 2013

mod_auth_kerb будет обрабатывать для вас фактическую аутентификацию. После этого будут установлены переменные окружения REMOTE_USER и KRB5CCNAME. Обратите внимание, что есть несколько предостережений:

  • mod_auth_kerb может выполнять трансляцию между принципалом Kerberos и локальным именем пользователя, если включена опция Krb5AuthToLocal.
  • Если включен Krb5AuthToLocal, при успешной аутентификации mod_auth_kerb вызовет библиотеку Kerberos для выполнения перевода из аутентифицированного имени в локальное имя, поскольку принципал Kerberos не всегда совпадает с реальным пользователем в операционной системе (вы можете сопоставить принципалы с именами пользователей ).
  • Когда MIT Kerberos используется, это отображение выполняется с помощью правил auth_to_local в /etc/krb5.conf, подробности см. На странице руководства krb5.conf.
  • В mod_auth_kerb есть ошибка, из-за которой полученное локальное имя не должно иметь более длинного имени, чем сам принципал. Это обычно верно для принципалов из области по умолчанию, поскольку они представлены без части области, то есть «пользователь» вместо «пользователь @ REALM». Однако, если у вас есть несколько доверенных областей, пользователи из областей не по умолчанию будут отображаться как «user@ANOTHER.REALM», а затем mod_auth_kerb выйдет из строя. Эта ошибка должна быть исправлена ​​в Fedora 18+ и RHEL6.5, не уверен насчет Debian, так как mod_auth_kerb upstream немного мертв.
  • Следовательно, ваша переменная REMOTE_USER будет содержать имя участника Kerberos или имя локального пользователя, в зависимости от того, как был настроен mod_auth_kerb. Если ваше приложение полагается на тот факт, что значение REMOTE_USER должно быть реальным существующим пользователем системы, вам необходимо убедиться, что опция Krb5AuthToLocal включена и такие пользователи видны в системе (через winbind или sssd).

В твоем случае я бы посоветовал посмотреть на то, как Том Маклафлин: http://blogs.freebsdish.org/tmclaugh/2010/07/15/mod_auth_kerb-ad-and-ldap-authorization/

...