Подтвердить что ты не робот

Общие сведения об аутентификации на сервере приложений Java

В настоящее время я работаю над проектом, работающим на JBoss AS 7, который требует аутентификации из разных источников. Я пытаюсь понять различные компоненты, которые объединяются для обеспечения аутентификации.

У меня есть некоторые предположения/догадки о том, как все это сочетается, но мне нужно убедиться, что мое понимание верное. Итак, ниже я понимаю, что процесс проверки подлинности для JBoss AS7.


У вас есть область безопасности, которая определяет, как пользователи аутентифицируются. Затем эта область подвергается действию вашего приложения, чтобы защитить его или ее часть. В AS7 это настроено в < подсистеме xmlns = "urn: jboss: domain: security: 1.0" > элемент.

Область может быть настроена для аутентификации пользователей с помощью различных источников с использованием модулей входа в систему, таких как база данных, LDAP, локальный файл или что-то еще. Можно определить несколько модулей входа, и вы можете указать некоторую комбинацию модулей входа, которые должны быть "успешными" для аутентификации.

Фактическое имя пользователя и пароли передаются через механизм, определенный в файле web.xml(для сервлетов), определенный в < login-config > элемент.


Предполагая, что вышеуказанный процесс верен (и может быть не так):

  • Подходит ли весь этот процесс аутентификации к спецификации JAAS или JAAS - это небольшая или дополнительная часть этой процедуры?
  • Все типы < auth-methods > (т.е. BASIC, DIGEST и FORM) работают со всеми типами логин-модулей? Эта страница, похоже, не предполагает, но я не видел четкой документации, соответствующей < login-module > options < login-config > варианты.
  • Поток имени пользователя и пароля из login-config в модуль входа в систему кажется достаточно прямым, но что происходит с такими системами, как OpenID или OAuth, где есть промежуточные шаги (например, перенаправление на внешние страницы входа)?
  • Как такие проекты, как Безопасность Seam 3, Apache Shiro и Spring Безопасность вписывается в это изображение?
4b9b3361

Ответ 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).