Рассматриваемые темы Подсистема безопасности сервера приложений Конфигурация безопасности в EJB Сервисы авторизации и аутентификации в Java 2-1
Подсистема безопасности Предотвращение несанкционированного доступа к данным приложения Защита системы от сбоев, которые могут сказаться на качестве обслуживания Однозначное сопоставление действий и пользователей, их производивших Цели подсистемы 2-2
Подсистема безопасности Аутентификация Авторизация (контроль доступа) Целостность данных Конфиденциальность Неотрекаемость Аудит Свойства безопасности 2-3
Подсистема безопасности Security Realm набор системных ресурсов и служб, ответственных за безопасность Активен может быть только один Security Realm Создание Security Realm задача администратора Security Realm 2-4
Подсистема безопасности Пользователь сущность, использующая сервер приложений, например: Конечные пользователи Клиентские приложения Другие сервера приложений Группа логический набор пользователей Облегчают администрирование Пользователи и группы 2-5
Подсистема безопасности Принципал определяющая характеристика потока, вызывающего метод EJB Представляет собой конкретного пользователя, авторизованного с помощью пары логин-пароль Может включать дополнительные сведения (группы, роли...) Роль именованный набор прав доступа к ресурсам приложения Принципалы и роли 2-6
Подсистема безопасности Членство в группе статическое Роли могут быть динамическими (основанными на определенных критериях) Отличие ролей от групп 2-7
Рассматриваемые темы Подсистема безопасности сервера приложений Безопасность в EJB Сервисы авторизации и аутентификации в Java 2-8
Безопасность в EJB Облегчить задачу обеспечения безопасности приложения для разработчика Предоставить декларативную, управляемую контейнером модель безопасности Упростить переносимость приложений между различными серверами приложений Цели подсистемы безопасности 2-9
Безопасность в EJB Container-managed безопасность: декларативна (описывается в аннотациях или XML-дескрипторах развертки) ограничивает доступ к ресурсам на основе ролей пользователей Container-Managed Безопасность 2-10
Безопасность в EJB Bean-managed безопасность: Реализуется в коде приложения Менее переносима Может использовать роли из дескрипторов Может использовать методы EJBContext Bean-Managed Безопасность 2-11
Безопасность в EJB Необходимо указать два типа метаданных: Логические имена ролей Соответствующие разрешения доступа к EJB-интерфейсу Метаданные безопасности EJB: MethodPermissions, PermitAll, DenyAll ejb-jar.xml Декларативная безопасность 2-12
Безопасность в EJB Используются для аннотирования классов и/или методов (аннотации метода имеют больший определяет список ролей, имеющих доступ String[] value список разрешить доступ для всех запретить доступ для всех ролей Аннотации javax.annotation.security 2-13
Безопасность в public class MyLocalBean implements MyBean public int getSomeSensitiveInfo() {... } // Используем аннотацию класса по умолчанию public boolean login(String login, String pass) {... } Пример конфигурации 2-14
Безопасность в EJB Как решить следующую проблему: Подмена контекста безопасности 2-15
Безопасность в EJB public class OrderAgent ProductCatalog cat; public int getPrice(Item item) { // Выполним от имени SALES_REP cat.getBasePrice(item);... Параметр: String value имя роли
Безопасность в EJB Два метода EJBContext: Principal getCallerPrincipal() boolean isCallerInRole(String roleName) Все EJB имеют доступ к этим методам через наследников EJBContext: javax.ejb.SessionContext javax.ejb.MessageDrivenContext Программная безопасность 2-17
Безопасность в EJB 2-18 public class TodoListBean SessionContext ctx; public void assignProject(Project p) { if (!ctx.isCallerInRole("PROJ_LEAD")) throw new SecurityException("Access denied");... Параметр: String[] value список ролей
Рассматриваемые темы Подсистема безопасности сервера приложений Безопасность в EJB Сервисы авторизации и аутентификации в Java (JAAS Java Authentication and Authorization Service) 2-19
JAAS JAAS набор API, позволяющий: Разрабатывать подключаемые модули аутентификации Аутентифицировать клиента с использованием стандартного API Для клиентов EJB JAAS это альтернатива JNDI-аутентификации EJB авторизация реализуется с помощью ролей Что такое JAAS? 2-20
JAAS Возможность прозрачного для клиента подключения нового механизма аутентификации Клиент, однажды прошедший аутентификацию, безопасно может продолжать вызывать EJB-методы Пользовательский контекст безопасности автоматически распространяется на другие бизнес-интерфейсы контейнера JAAS и EJB 2-21
JAAS Архитектура аутентификации JAAS 2-22
JAAS API аутентификации JAAS 2-23 javax.security.auth.Subject...auth.login.LoginContext...auth.spi.LoginModule...auth.login.Configuration...auth.callback.Callback...auth.callback.CallbackHandler
JAAS Клиентский класс Java Реализация интерфейса LoginModule Реализация интерфейса CallbackHandler Файл конфигурации Реализацию интерфейса java.security.PrivilegedAction Клиентские компоненты JAAS 2-24
Рассмотренные темы Подсистема безопасности сервера приложений Безопасность в EJB Сервисы авторизации и аутентификации в Java (JAAS Java Authentication and Authorization Service) 2-25
Практика TBD Упражнение 2-26