Аутентификация единого входа, объединяющая Kerberos, ADFS и Spring Security

#java #spring-boot #kerberos #adfs #spnego

#java #spring-загрузка #kerberos #adfs #spnego

Вопрос:

В настоящее время я анализирую несколько альтернатив для реализации механизма аутентификации, который не будет требовать учетных данных от пользователя. Почему бы и нет? Потому что мы говорим о веб-приложении, которое будет использоваться только во внутренней сети, которая (должна) находиться в области Kerberos.

Я потратил некоторое время, чтобы попытаться выяснить, какой подход, но, похоже, путаница в моем сознании только растет. Я спрашиваю, какую стратегию мне следует использовать для подключения этих компонентов, или если есть какие-либо, которые не являются необходимыми:

  1. Kerberos: это (предполагаемый) механизм аутентификации, который пользователи проходят проверку подлинности при входе в систему с помощью своих профилей Windows. Я не уверен, предоставляет ли он явный список утверждений для извлечения участника.
  2. ADFS: С моей точки зрения, службы федерации могут быть просто расширением Kerberos, обернув его билет в более стандартный протокол SAML. На мой взгляд, это может помочь, как только веб-приложение будет подключено к внешней сети. Таким образом, правильно ли я говорю, что мне это не нужно для интеграции приложения в механизм единого входа? Или это все равно потребуется как средство интеграции.
  3. Oracle WebLogic: это выбранный сервер приложений, на котором будет размещаться веб-приложение. Кажется, есть способы настроить WLS как часть области Kerberos. Основной точкой интеграции является keytab. Здесь я нашел старый пример, но, похоже, более или менее то же самое нужно сделать и в WLS 12c: http://www.ateam-oracle.com/kerberos-and-weblogic-server-on-windows-step-by-step /
  4. SPNEGO: похоже, это стандартный протокол, который используется при настройке архитектуры, если протокол HTTP используется для доступа к поставщику услуг (веб-приложению). Для меня это просто расширение Kerberos, которое необходимо в моем случае использования, поскольку доступ к сервису действительно осуществляется через HTTP (Angular SPA SpringBoot взаимодействуют через REST).
  5. SpringSecurity-расширение Kerberos: SpringSecurity предлагает множество расширений, одним из которых является модуль для поддержки Kerberos и SPNEGO. Сейчас у меня в голове кипят два вопроса:
    • Я вижу, что это альтернатива на случай, если интеграция не обрабатывается на сервере приложений (Oracle WLS). Если да, то какой подход был бы лучшим?
    • В своих документах Spring предоставляет пример настройки адаптера безопасности с использованием этого расширения (основная точка интеграции: все еще keytab). Но как насчет извлечения сведений о пользователе? Требуется ли по-прежнему служба для подключения к Active Directory, хранящей их отдельно?

Я очень смущен альтернативами и всеми компонентами, которые могут работать вместе. Я также не нашел краткой блок-схемы процесса для такого варианта использования, только те из них, которые работают отдельно. Итак, какой подход можно разработать, предполагая, что у нас есть все вышеперечисленные компоненты?

ПРИМЕЧАНИЕ: Кроме того, прямо сейчас уровень Angular проходит проверку подлинности через фиктивную службу в JWT-представлении SpringBoot. Я хотел бы сохранить JWT между ними, если это возможно, но если билет Kerberos можно легко получить и проанализировать для получения утверждений, он устареет.

Ответ №1:

Используйте мое расширение Tomcat SPNEGO AD, которое содержит прокладку Spring Sec.