Спецификация безопасности JavaEE оставляет много места для разработчиков контейнеров, поэтому я сосредоточусь на реализации JBoss, чтобы ответить.
Реализация безопасности JBoss
JBoss использует аутентификацию JAAS для реализации безопасности JavaEE. Таким образом, он использует преимущества стабильного API и может использовать существующих LoginModule
реализаций . Модули входа используются для аутентификации субъекта, а также для добавления ролей в Subject
. JAAS предоставляет механизмы для авторизации, проверки разрешений, а JBoss использует его внутри.
JAAS LoginModule поддерживает не только аутентификацию на основе пароля, но и аутентификацию на основе токена.
Аутентификация на основе токена
Хорошим примером того, что можно сделать в JBoss благодаря JAAS, является поддержка HTTP-согласования для Kerberos SPNEGO : дополнительная auth-method
с именем SPNEGO
реализована благодаря Tomcat Authenticator и валидации токенов использует стандарт JavaSE Kerberos LoginModule .
Кстати, API LoginModule не является обязательным, он может быть слишком сложным для некоторых протоколов. Например, реализация для поддержки OpenID с PicketLink использует только API сервлета.
Сторонние библиотеки безопасности
Эти библиотеки часто предоставляют уровни безопасности для приложения, работающего с контекстом JavaEE или чистого Java, даже если оно не использует преимущества спецификаций JavaEE для аутентификации или авторизации на основе ролей.
Spring Security предоставляет разработчикам приложений другие абстракции, кроме безопасности JavaEE, для реализации аутентификации и авторизации, в основном благодаря ServletFilter
, когда речь идет о веб-приложении. Для защиты его приложения доступна большая панель выбора: можно смешать несколько вариантов, таких как: использование JAAS, использование безопасности контейнера JavaEE или реализации, специфичные для Spring Security (в случае OpenID и OAuth). Также нет никакой зависимости от JavaEE, поэтому он может использоваться практически в любой ситуации при работе на JavaSE. Большинство архитекторов предпочитают создавать приложения безопасности на Spring Security, чтобы иметь возможность переключать конкретные реализации в будущем.
Apache Shiro действительно похож на Spring Security, но он моложе и, вероятно, проще в настройке.
Безопасность шва не зависит от безопасности JavaEE или JBoss, а только от API сервлетов и JSF. Это, очевидно, самый простой вариант для веб-приложения на основе JSF / Seam. За кулисами он использует PicketLink реализаций.
В заключение , вопрос об использовании сторонних библиотек в дополнение или вместо безопасности JavaEE зависит от архитектурных решений: сложность приложения, независимость от поставщика и переносимость, контроль над реализациями для исправления ошибок или улучшения. В вашем конкретном контексте наличие нескольких источников аутентификации требует гибкого решения, такого как Spring Security, которое поддерживает цепочку провайдера аутентификации (или Shiro).