Настройка Kerberos-аутентификации

Данные, используемые в документации для примера настройки

Данные, используемые в документации для примера настройки Kerberos-аутентификации:

  • Домен: msk.example.com

    Полное имя домена аутентификации (домен, в котором зарегистрированы пользователи)

  • Второй домен: spb.example.com

    Полное имя второго домена аутентификации (используется для примеров с мультидоменной конфигурацией)

  • Сервер приложений: srv-app.local

    DNS A-запись сервера приложения

  • Ссылка на приложение: https://support.msk.example.com

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

  • Служебная учетная запись: naumen-spnego@msk.example.com

    Пользователь, к которому привязывается SPN

  • Пароль служебной учетной записи: myP@ssw0rd

    Пароль пользователя, к которому привязывается SPN. Используется при генерации keytab-файла

  • Пользователь-клиент: myuser@msk.example.com

    Пользователь-клиент приложения

  • Realm: MSK.EXAMPLE.COM, SPB.EXAMPLE.COM

    Область аутентификации Kerberos. Записывается заглавными буквами. Соответствует полному имени домена аутентификации

Создание SPN и keytab-файла

Чтобы настроить сервер аутентификации в инфраструктуре Kerberos (Key Distribution Center), выполните следующие действия:

  1. Создайте учетную запись пользователя (User Logon Name = naumen-spnego) в Active Directory с помощью Active Directory Users and Computers:

    • при создании снимите флажок "User must change password at next logon";
    • введите и запомните пароль (myP@ssw0rd).

    Убедитесь, что в Active Directory нет учетной записи компьютера с таким же именем.

  2. Выполните настройки:

    3.1. Создайте SPN, привязанный к служебной учетной записи, и сгенерируйте keytab-файл, который будет использован для аутентификации сервером приложения, с помощью команды:

    ktpass -princ HTTP/srv-app.local@MSK.EXAMPLE.COM -mapuser naumen-spnego@msk.example.com -pass myP@ssw0rd -SetPass -out c:\TEMP\naumen.keytab

    где

    • -princ HTTP/srv-app.local@MSK.EXAMPLE.COM — principal name, сформированный по следующему принципу:

      • HTTP/srv-app.local — SPN, составленный из специального префикса HTTP/ (не указывать HTTPS!) и имени сервера, на котором работает приложение
      • @MSK.EXAMPLE.COM — realm, для которого выписывается keytab-файл. Указывается название домена большими буквами.
    • -mapuser naumen-spnego@msk.example.com — имя служебной учетной записи, к которой привязывается SPN.
    • -pass myP@ssw0rd — пароль служебной учетной записи, указанной после опции -mapuser.

      Пароль должен совпадать с паролем, установленным для служебной учетной записи.

    • -SetPass — отключение принудительной установки указанного пароля служебной учетной записи.
    • -out c:\TEMP\naumen.keytab — путь, по которому будет сформирован keytab-файл

    Если в профиле пользователя AD включены два типа шифрования, то тип шифрования ключа в keytab-файле нужно указать как -crypto ALL

    В результате будет создан файл naumen.keytab.

    3.2. После генерации keytab-файла пароль служебной учетной записи naumen-spnego не должен меняться, иначе keytab-файл окажется невалидным. При необходимости сменить пароль учетной записи необходимо повторно запустить указанную выше команду и сгенерировать новый keytab-файл.

    Имя хоста в SPN должно соответствовать полному доменному имени сервера приложения.

    3.3. Чтобы использовать для доступа к серверу приложения дополнительные имена (при наличии дополнительных записей DNS типа 'CNAME'), зарегистрируйте SPN на основное DNS-имя и добавьте SPN для всех дополнительных записей типа 'CNAME', с помощью команды:

    setspn -A HTTP/support.msk.example.com@MSK.EXAMPLE.COM msk.example.com\naumen-spnego

    где support.msk.example.com — CNAME на основной домен srv-app.local

  3. Выведите список SPN, привязанных к учетной записи, и убедитесь в их корректности с помощью команды:

    setspn -L msk.example.com\naumen-spnego

  4. Безопасно скопируйте keytab-файл на сервер приложения (например, программой WinSCP) в любой каталог (например, /opt/naumen/nausd4/conf/naumen.keytab).

Сдвиг по времени системных часов компьютеров, входящих в инфраструктуру Kerberos, является достаточно распространенной проблемой в настройке. Разница системного времени не должна превышать 5 мин.

Настройка сервера приложений

Настройка krb5.conf (krb5.ini)

Имя области аутентификации (REALM) задается в системном файле: /etc/krb5.conf для Linux.

В файле krb5.conf (krb5.ini) пропишите имя области аутентификации (имя домена заглавными буквами):

[libdefaults]
   default_realm = MSK.EXAMPLE.COM

Настройка параметров аутентификатора (dbaccess.properties)

Описание всех параметров настройки аутентификации в файле dbaccess.properties, см. Аутентификация и авторизация.

Чтобы настроить параметры аутентификатора в конфигурационном файле dbaccess.properties:

  1. Добавьте аутентификатор "SPNEGO" в список используемых типов аутентификаторов

    Пример:

    ru.naumen.core.authentication.authenticators=SPNEGO,INTERNAL

  2. Укажите необходимые параметры аутентификатора (SPN, путь до keytab-файла):

    ru.naumen.core.authentication.authenticators=SPNEGO,INTERNAL
    ru.naumen.core.authentication.spnego-authenticator.service-principal=HTTP/srv-app.local
    ru.naumen.core.authentication.spnego-authenticator.keytab=file:/opt/naumen/nausd4/conf/naumen.keytab
    ru.naumen.core.authentication.spnego-authenticator.debug=true

    В ru.naumen.core.authentication.spnego-authenticator.service-principal указывается SPN, для которого выписан keytab. Если дополнительно явно указать realm, то можно не указывать default_realm в krb5.conf (krb5.ini). Realm указывается через символ "@" после имени SPN: "HTTP/srv-app.local@MSK.EXAMPLE.COM".

    В параметре ru.naumen.core.authentication.spnego-authenticator.keytab указывается путь до keytab-файла, путь обязательно должен содержать префикс "file:". Также в значении параметра можно использовать переменную (conf) ${ext.prop.dir} — путь до каталога конфигурации приложения: "file:${ext.prop.dir}/naumen.keytab".

    В параметре ru.naumen.core.authentication.spnego-authenticator.keytab-spn-map указывается словарь, содержащий пары (spn + realm) - (keytab) для прозрачной авторизации в нескольких доменах с разным паролем пользователя. По умолчанию параметр пуст и используются настройки ru.naumen.core.authentication.spnego-authenticator.keytab, ru.naumen.core.authentication.spnego-authenticator.service-principal.

    Параметр ru.naumen.core.authentication.spnego-authenticator.debug рекомендуется устанавливать в "true". Дополнительный вывод не может значительно увеличить объем журналов приложения.

  3. Перезапустите сервис приложения, чтобы изменения конфигурации вступили в силу.

В пути до keytab-файла рекомендуется использовать прямой слеш "/" независимо от используемой операционной системы. Обратный слеш "\" в сочетании с некоторыми символами может быть интерпретирован Java как управляющий символ.

Настройка браузера

Настройка рабочего места пользователя сводится к конфигурации браузера.

Mozilla Firefox

Чтобы настроить браузер Mozilla Firefox, выполните следующие действия:

  1. Запустите Mozilla Firefox.
  2. В адресной строке введите "about:config" и нажмите Enter.
  3. В поле "Поиск" (Filter) введите "negotiate", чтобы ограничить список опций.
  4. Выполните двойное нажатие мышью на строке с параметром "network.negotiate-auth.trusted-uris".
  5. В диалоговом окне введите:

    • Чтобы разрешить SPNEGO аутентификацию только по конкретной ссылке, введите полностью домен из ссылки (например, "support.msk.example.com").
    • Чтобы разрешить SPNEGO аутентификацию для целого домена, введите имя домена с точкой в начале (например,".msk.example.com").
    • Чтобы разрешить SPNEGO аутентификацию для нескольких доменов, введите их через запятую. После запятой можно ставить пробел.

Google Chrome

Настройка браузера заключается в добавлении параметра запуска --auth-server-whitelist="*.msk.example.com".

Чтобы добавить параметр запуска, выполните следующие действия:

  1. Кликните правой кнопкой мыши на ярлыке "Google Chrome".
  2. Выберите "Свойства".
  3. В поле "Объект" к строке запуска браузера допишите "--args --auth-server-whitelist="*.msk.example.com"".

Пример:

"C:\Program Files\Google\Chrome\Application\chrome.exe" --args --auth-server-whitelist="*.msk.example.com"

Альтернативным вариантом настройки является настройка Internet Explorer или Edge по инструкции для соответствующего браузера на одной рабочей станции с Chrome. В этом случае Google Chrome берет системные настройки свойств браузера (Internet Options) и не требует запуска с дополнительными параметрами.

Internet Explorer

Настройка браузера заключается в добавлении сайта в местную сеть Интранет (Intranet).

Добавление сайта в местную сеть Интранет (Intranet)

Чтобы настроить браузер Internet Explorer, выполните следующие действия:

  1. Запустите Internet Explorer.
  2. Откройте окно "Свойства браузера" (Internet Options) ("Сервис" (Tools) → "Свойства браузера" (Internet Options)).
  3. Перейдите на вкладку "Безопасность" (Security).
  4. Выберете зону "Местная интрасеть" (Local Intranet) и нажмите кнопку "Узлы" (Sites).
  5. В диалоговом окне убедитесь, что флажок "Автоматически определять принадлежность к интрасети" (Include all sites that bypass the proxy server) установлен и нажмите кнопку "Дополнительно" (Advanced).
  6. В диалоговом окне "Местная интрасеть" (Local Intranet)" добавьте все относительные доменные имена, которые будут использоваться в сети Интранет (например, — "*.msk.example.com" или просто "support.msk.example.com").
  7. Нажмите "OK" и закройте диалоговое окно.

При стандартных настройках этого должно быть достаточно для работы прозрачной аутентификации в приложении.

Проверки при ошибке

Если после добавления сайта в сеть Интранет при переходе в приложение возникает ошибка, выполните проверки:

  1. Установлена ли автоматическая аутентификация для зоны Intranet:
    • перейдите на вкладку "Безопасность" (Security), выберете зону "Местная интрасеть" (Local Intranet) и нажмите кнопку "Другой..."(Custom Level);
    • в диалоговом окне "Параметры безопасности" (Security Settings) прокрутите вниз список к секции "Проверка подлинности пользователя" (User Authentication) и выберете "Автоматический вход в сеть только в зоне интрасети" (Automatic logon only in Intranet zone). Эта настройка позволит пользователям избавиться от повторного ввода логина и пароля;
    • нажмите "OK", чтобы закрыть диалоговое окно.
  2. Проверьте настройки Proxy:
    • перейдите на вкладку "Подключения" (Connections);
    • нажмите кнопку "Настройка сети" (LAN Settings);
    • проверьте правильность ввода адреса proxy сервера и номера порта, затем нажмите кнопку "Дополнительно" (Advanced);
    • в диалоговом окне "Параметры прокси-сервера" (Proxy Settings) убедитесь, что все требуемые доменные имена указаны в поле "Исключения" (например, *.msk.example.com);
    • нажмите "OK", чтобы закрыть диалоговое окно.
  3. Проверьте разрешение на использование встроенной аутентификации:
    • перейдите на вкладку "Дополнительно" (Advanced);
    • в разделе "Безопасность" (Security) установите флажок "Разрешить встроенную проверку подлинности Windows" (Enable Integrated Windows Authentication);
    • нажмите кнопку "OK".

Microsoft Edge

Настройка браузера заключается в добавлении сайта в местную сеть Интранет (Intranet).

Настройка браузера Microsoft Edge выполняется через панель управления Windows.

Добавление сайта в местную сеть Интранет (Intranet)

Чтобы выполнить настройку:

  1. Откройте панель управления (Control Panel) и выберите "Свойства браузера" (Internet Options).

  2. Перейдите на вкладку "Безопасность" (Security).
  3. Выберете зону "Местная интрасеть" (Local Intranet) и нажмите кнопку "Узлы" (Sites).
  4. В диалоговом окне убедитесь, что флажок "Автоматически определять принадлежность к интрасети" (Include all sites that bypass the proxy server) установлен и нажмите кнопку "Дополнительно" (Advanced).
  5. В диалоговом окне "Местная интрасеть" (Local Intranet)" добавьте все относительные доменные имена, которые будут использоваться в сети Интранет (например, — "*.msk.example.com" или просто "support.msk.example.com").
  6. Нажмите "OK" и закройте диалоговое окно.

При стандартных настройках этого должно быть достаточно для работы прозрачной аутентификации в приложении.

Проверки при ошибке

Если после добавления сайта в сеть Интранет при переходе в приложение возникает ошибка, выполните проверки:

  1. Установлена ли автоматическая аутентификация для зоны Intranet:
    • перейдите на вкладку "Безопасность" (Security), выберете зону "Местная интрасеть" (Local Intranet) и нажмите кнопку "Другой..."(Custom Level);
    • в диалоговом окне "Параметры безопасности" (Security Settings) прокрутите вниз список к секции "Проверка подлинности пользователя" (User Authentication) и выберете "Автоматический вход в сеть только в зоне интрасети" (Automatic logon only in Intranet zone). Эта настройка позволит пользователям избавиться от повторного ввода логина и пароля;
    • нажмите "OK", чтобы закрыть диалоговое окно.
  2. Проверьте разрешение на использование встроенной аутентификации:
    • перейдите на вкладку "Дополнительно" (Advanced);
    • в разделе "Безопасность" (Security) установите флажок "Разрешить встроенную проверку подлинности Windows" (Enable Integrated Windows Authentication);
    • нажмите кнопку "OK".

Yandex Browser

Yandex Browser для организаций

Редакция "Yandex Browser для организаций" отличается возможностью централизованной настройки на уровне групповых политик.

Настройка прозрачной аутентификации для этой редакции описана в официальной документации.

Yandex Browser "Домашняя редакция"

Настройка заключается в добавлении параметра запуска --auth-server-whitelist="*.msk.example.com".

Чтобы добавить параметр запуска, выполните следующие действия:

  1. Наведите курсор на ярлык "Yandex Browser" и нажмите правую клавишу мыши.
  2. В контекстном меню выберите "Свойства".
  3. В поле "Объект" к строке запуска браузера допишите

    "--args --auth-server-whitelist="*.msk.example.com"".

    Пример:

    "C:\Users\Username\AppData\Local\Yandex\YandexBrowser\Application\browser.exe" --args --auth-server-whitelist="*.msk.example.com"

Альтернативным вариантом настройки является настройка Internet Explorer или Internet Edge по инструкции для соответствующего браузера на одной рабочей станции с Yandex Browser. В этом случае Yandex Browser берет системные настройки свойств браузера (Internet Options) и не требует запуска с дополнительными параметрами.

Проверка работы Kerberos-аутентификации

Логирование ошибок аутентификации

Отображение ошибок аутентификации в логе приложения настраивается в конфигурационном файле:

Для настройки логирования ошибок аутентификации выполните действия:

  1. Добавьте в конец конфигурационного файла log4j2.properties следующие строки:

    # Общие части аутентификаторов
    logger.springauth.name=org.springframework.security.authentication
    logger.springauth.level=DEBUG
    # Логеры Kerberos/SPNEGO аутентификатора
    logger.secserver.name=ru.naumen.sec.server
    logger.secserver.level=DEBUG
    logger.sepnego.name=ru.naumen.sec.server.spnego
    logger.sepnego.level=DEBUG
  2. Перезапустите приложение. Ошибки аутентификации будут попадать в лог приложения.

Проведение проверки работы Kerberos-аутентификации

Для проверки работы Kerberos-аутентификации выполните действия:

  1. Добавьте в приложении пользователя с логином myuser@msk.example.com вручную или с помощью импорта.
  2. Войдите в ОС Microsoft Windows под данным пользователем.
  3. Настройте браузер по инструкции, см. Настройка браузера.
  4. Перейдите в браузере по ссылке: https://support.msk.example.com/sd/operator.

    Вход должен осуществиться автоматически без запроса логина или пароля.