Как реализовать аутентификацию kerberos с помощью логина/пароля?

#javascript #java #spring-boot #spring-security #kerberos

Вопрос:

У нас есть автономный kerberos AS (не AD, это отдельная система), поэтому ни одна рабочая станция пользователя об этом не знает, но у некоторых пользователей есть свои учетные данные (логин пароль, без вкладки ключей).

Проблема: нам нужна служба (СЛУЖБА) весенней загрузки и интерфейсное приложение, в котором пользователь может ввести учетные данные, получить токен SPNEGO от СЛУЖБЫ и продолжить работу с ним дальше, веб-браузер не должен знать об этой аутентификации.

Предварительные условия: весенняя загрузка, java 14, У СЕРВИСА есть keytab (http/service@REALM), у пользователя есть логин пароль

Как мы видим решение:

  1. Интерфейс отправляет логин пароль через SSL на СЕРВЕР;
  2. СЕРВЕР делает kinit (или что-то еще?) в KDC, получает TGT/TGS, ключи сеансов;
  3. СЕРВЕР отвечает на интерфейс с помощью токена SPNEGO.

Вопрос: это хороший способ решить проблему? Если да, то как мы можем получить токен SPNEGO для пары логин пароль в java?

Ответ №1:

Запрос пароля пользователя определенно не является безопасным подходом. Большинство пользователей будут неохотно предоставлять свои учетные данные на внутренний сервер.

Основываясь на том, что вы написали, я предполагаю, что вам нужно сделать кое-что от имени пользователя (в бэкэнде) и передать билет пользователя kerberos другим службам kerberized.
Лучшим способом будет —

  1. Переведите свое приложение в режим проверки подлинности Kerberos. Таким образом, ваш внутренний сервер всегда будет получать токен kerberos пользователя (только один раз во время первой аутентификации в вашем приложении).
  2. Включите ограниченное делегирование Kerberos в настройках AD. Сделав это, вы можете делегировать токен kerberos пользователя другим приложениям, обработанным с помощью Kerberos.
  3. Вы можете сохранить токен kerberos пользователя в сеансе приложения и использовать его в любое удобное для вас время.

Это гораздо более безопасный подход. Единственная проблема заключается в том, как вы обновите токен, который у вас уже есть. Но обычно токены kerberos действительны в течение 8 часов, поэтому я не вижу серьезных проблем.