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

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

У меня есть…

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

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

Это возможно? Если да: как?

То, что я выяснил до сих пор: я должен «включить» домен в Firefox .

Однако об этом …

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

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

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

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

    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 есть ошибка, из-за которой локальное имя не должно иметь больше имени, чем сам главный. Обычно это относится к принципалам из области по умолчанию, поскольку они представлены без части царства, то есть «пользователь», а не «user @ REALM». Однако, если у вас есть несколько доверенных областей, пользователи из нестандартных областей будут отображаться как «user@ANOTHER.REALM», а затем mod_auth_kerb будет волноваться. Эта ошибка должна быть исправлена ​​в Fedora 18+ и RHEL6.5, но не уверен в Debian, так как mod_auth_kerb вверх по течению немного мертв.
    • Таким образом, ваша переменная 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/