Общие сведения о Kerberos-аутентификации и особенности реализации в приложении

Основные понятия и определения

Основные понятия и определения:

  • Kerberos — сетевой протокол аутентификации, позволяющий безопасно передавать данные через незащищенные сети для безопасной идентификации.

    Также Kerberos — набор бесплатного программного обеспечения от Массачусетского технологического института MIT (Massachusetts Institute of Technology), разработавшего этот протокол. Организация протокола направлена в первую очередь на клиент-серверную модель и обеспечивает взаимную аутентификацию — оба пользователя через сервер подтверждают личности друг друга. Сообщения, отправляемые через протокол Kerberos, защищены от прослушивания и атак повторного воспроизведения.

  • Realm — область (домен) аутентификации в инфраструктуре Kerberos. Значение чувствительно к регистру символов.
  • SPN (Service Principal Name) — имя участника службы (уникальное имя), по которому идентифицируется экземпляр сервиса. Это способ сопоставить учетную запись Windows, ответственную за запуск экземпляра службы, с сервером и службой
  • UPN (User Principal Name) — логин пользователя, представляет собой имя, сокращенное относительно полного имени пользователя.

    Пример: user@domain.ru

  • KDC (Key Distribution Center) — сервер аутентификации в инфраструктуре Kerberos. Контроллер домена.
  • TGS (Ticket Grant Service) — билет на предоставление доступа к сервису, в нашем случае это билет kerberos на доступ в приложение.
  • Keytab — файл, содержащий одну или несколько пар SPN и долговременного ключа шифрования.

Механизм аутентификации SPNEGO в SMP

Описание механизм аутентификации SPNEGO в SMP:

  1. Пользователь входит в домен под своей учетной записью.
  2. Пользователь открывает в браузере ссылку на приложение. Браузер отправляет в приложение GET-запрос.
  3. Приложение возвращает браузеру ответ с кодом 401 и заголовком Authenticate: Negotiate, таким образом приложение инициирует SPNEGO аутентификацию.
  4. Если браузер настроен на использование прозрачной аутентификации, он понимает, что нужно получить в домене kerberos-билет и предоставить его на проверку приложению. Браузер извлекает из запрошенного адреса имя сервера (hostname) и формирует с помощью него Service Principal Name (SPN). Сформированный SPN отправляется домен-контроллеру (в Kerberos Ticket Granting Service) с помощью запроса билета TGS_REQ для получения kerberos-билета. Если в домене зарегистрирован указанный SPN, домен-контроллер выдает пользователю kerberos-билет для доступа в приложение.
  5. Браузер отправляет запрошенный kerberos-билет в приложение в заголовке HTTP-запроса.
  6. Приложение расшифровывает полученный kerberos-билет, используя долговременный ключ шифрования из keytab-файла.

    Приложение извлекает из kerberos-билета имя пользователя и производит поиск пользователя во внутренней базе данных для определения прав.

  7. Если пользователь найден во внутренней базе данных, приложение возвращает браузеру ответ с кодом 200 и пользователь успешно входит в приложение.

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

После успешной проверки kerberos-билета от пользователя:

  1. Приложение извлекает логин из kerberos-билета, например, user@msk.example.com.

    Логин из kerberos-билета соответствует атрибуту sAMAccountName в Active Directory.

  2. Приложение производит последовательный поиск нескольких вариантов логина во внутренней базе данных:

    1. user
    2. user@MSK.EXAMPLE.COM
    3. user@MSK
    4. MSK\user
  3. Если поиск завершился успешно и найден ровно один вариант, приложение разрешает вход под найденным пользователем.

    Если логин не найден или найдено более одного варианта логина, возвращается ошибка.

Включить или отключить регистронезависимость логинов можно в конфигурационном файле dbaccess.properties (параметр login.casesensitive, раздел Аутентификация и авторизация).

Требования к инфраструктуре для использования Kerberos-аутентификации

Требования к инфраструктуре для использования прозрачной аутентификации с использованием протокола Kerberos (дополнение к техническим требованиям):

  • Наличие KDC (Key Distribution Center) — сервер аутентификации в инфраструктуре Kerberos, контроллер домена Active Directory под управлением ОС MS Windows Server 2008 R2 и выше;
  • Рабочие станции пользователей под управлением ОС MS Windows XP выше;
  • Используемый браузер Microsoft Edge, Mozilla Firefox 3.6 и выше, Google Chrome 18,19 и выше;
  • Рабочие станции пользователей включены в домен, пользователи используют доменные учетные записи;
  • Логины пользователей в системе должны соответствовать логинам в AD (как правило, для этого используется механизм импорта оргструктуры из Active Directory);
  • При использовании разветвленной доменной инфраструктуры, в случае если домен пользователя отличается от домена KDC, между доменами должны быть установлены двусторонние доверительные отношения на уровне лесов (Forest Trust).

Для сервера приложения не обязательно:

  • иметь доступ до контроллеров домена, если только одновременно не настроена LDAP-аутентификация на форме;
  • принадлежать домену, в котором настраивается аутентификация;
  • запускаться под доменной учетной записью.

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