Ответ 1
Спецификация безопасности 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 Servlet.
Сторонние библиотеки безопасности
Эти библиотеки часто предоставляют уровни безопасности для приложения, использующего JavaEE или чистый Java-контекст, даже если он не использует преимущества спецификаций JavaEE для аутентификации или авторизации на основе ролей.
Spring Безопасность обеспечивает другие абстракции, чем безопасность JavaEE, для разработчиков приложений для реализации аутентификации и авторизации, главным образом благодаря ServletFilter
, когда веб-приложение. Для обеспечения его применения доступна большая панель выбора: возможно сочетание нескольких параметров, таких как: использование JAAS, использование безопасности контейнера JavaEE или Spring специфичные для безопасности реализации (в случае OpenID и OAuth). В JavaEE нет зависимости от того, что он может использоваться почти в любой ситуации при работе на JavaSE. Большинство архитекторов предпочитают создавать защиту приложений на Spring безопасности, чтобы иметь возможность переключать конкретные реализации в будущем.
Apache Shiro действительно похож на Spring Security, но он моложе и, вероятно, проще настроить.
Безопасность шлейфа не зависит от безопасности JavaEE или JBoss, а только от API-интерфейсов Servlet и JSF. Это, безусловно, самый простой вариант для веб-приложения на основе JSF/Seam. За сценой он использует PicketLink.
В качестве заключения вопрос об использовании сторонних библиотек в дополнение или замену безопасности JavaEE зависит от архитектурных решений: сложность приложения, независимость поставщика и переносимость, контроль над реализациями для исправления ошибок или улучшения, В вашем конкретном контексте наличие нескольких источников аутентификации требует гибкого решения, такого как Spring Безопасность, которая поддерживает цепочку поставщиков аутентификации (или Shiro).