#javascript #java #spring-boot #spring-security #kerberos
Вопрос:
У нас есть автономный kerberos AS (не AD, это отдельная система), поэтому ни одна рабочая станция пользователя об этом не знает, но у некоторых пользователей есть свои учетные данные (логин пароль, без вкладки ключей).
Проблема: нам нужна служба (СЛУЖБА) весенней загрузки и интерфейсное приложение, в котором пользователь может ввести учетные данные, получить токен SPNEGO от СЛУЖБЫ и продолжить работу с ним дальше, веб-браузер не должен знать об этой аутентификации.
Предварительные условия: весенняя загрузка, java 14, У СЕРВИСА есть keytab (http/service@REALM), у пользователя есть логин пароль
Как мы видим решение:
- Интерфейс отправляет логин пароль через SSL на СЕРВЕР;
- СЕРВЕР делает kinit (или что-то еще?) в KDC, получает TGT/TGS, ключи сеансов;
- СЕРВЕР отвечает на интерфейс с помощью токена SPNEGO.
Вопрос: это хороший способ решить проблему? Если да, то как мы можем получить токен SPNEGO для пары логин пароль в java?
Ответ №1:
Запрос пароля пользователя определенно не является безопасным подходом. Большинство пользователей будут неохотно предоставлять свои учетные данные на внутренний сервер.
Основываясь на том, что вы написали, я предполагаю, что вам нужно сделать кое-что от имени пользователя (в бэкэнде) и передать билет пользователя kerberos другим службам kerberized.
Лучшим способом будет —
- Переведите свое приложение в режим проверки подлинности Kerberos. Таким образом, ваш внутренний сервер всегда будет получать токен kerberos пользователя (только один раз во время первой аутентификации в вашем приложении).
- Включите ограниченное делегирование Kerberos в настройках AD. Сделав это, вы можете делегировать токен kerberos пользователя другим приложениям, обработанным с помощью Kerberos.
- Вы можете сохранить токен kerberos пользователя в сеансе приложения и использовать его в любое удобное для вас время.
Это гораздо более безопасный подход. Единственная проблема заключается в том, как вы обновите токен, который у вас уже есть. Но обычно токены kerberos действительны в течение 8 часов, поэтому я не вижу серьезных проблем.