Ревью 2 теория. Инструкция по созданию бизнесобъектов. Strategy это поведенческий паттерн, выносит набор алгоритмов в собственные классы и делает их взаимозаменимыми
Скачать 0.74 Mb.
|
31. Объекты Principal, Authorities, Authentication?Principal – это текущий вошедший в систему пользователь. Привязан к текущему потоку, запросу и сеансу. Фактически принципалом пользователя может выступать его логин, пароль, или роль и т.д. Authorities – представляют полномочия(разрешения), которые были предоставлены принципалу (или например, роли). Authentication – объект Authentication с именем и паролем, полученными от клиента и требующими проверку. Имя хранится в principal, а пароль в credenticals (до проверки, после проверки будет иначе). 31.1. Опиши процесс получения доступа?После аутентификации в поле Principal объекта. Authentication будет реальный пользователь в виде UserDetails, поле Credentials обнуляется, то есть имя и пароль перемещаются объект Principal. SecurityContextHolder используется для хранения контекста безопасности (security context). Кто является действующим в данный момент пользователем, прошел ли он проверку подлинности, какие полномочия у него есть. Spring Security автоматически связывает информацию аутентификации с текущим потоком, когда пользователь входит в систему, и автоматически очищает информацию аутентификации текущего потока, когда пользователь выходит из системы. getAuthentication () – возвращает информацию об аутентификации; getAuthorities () – список информации об авторизации, по умолчанию использует некоторые классы реализации интерфейса; GrantedAuthority() – обычно ряд строк, представляющих информацию об авторизации; getCredentials () – информация о пароле и строка пароля, введенная пользователем, обычно удаляются после аутентификации для обеспечения безопасности; getDetails () – детали, интерфейс реализации в веб-приложении обычно WebAuthenticationDetails, который записывает IP-адрес посетителя и значение sessionId; getPrincipal () – возвращает информацию об идентификаторе. Наиболее важная информация об идентичности в большинстве случаев возвращает класс реализации интерфейса. Прежде чем попасть в контроллер, запрос проходит через цепочку фильтров. UsernamePasswordAuthenticationFilter получает имя и пароль и формирует объект Authentication. Имя хранится в поле principal, а пароль - credenticals (строковое представление), isAuthenticated() устанавливается в false. На следующем этапе AuthenticationManager при помощи единственного метода authenticate() выполняет аутентификацию, сама проверка делегируется конкретным провайдерам (In-Memory, Jdbc, LDAP и др - в зависимости от того, как хранится реальный пользователь). Если аутентификация не прошла (имя и пароль неверны), то выбрасывается исключение BadCredentials. В случае же успеха возвращается тоже объект Authentication, но заполненный по-другому: в поле Principal объекта Authentication будет реальный пользователь в виде UserDetails (сюда перемещаются имя и пароль), поле Credentials обнуляется, а isAuthenticated() меняется с false на true. 31.2. В чем разница между hasRole() и hasAuthority() в Spring Security?hasRole() определяет роль (для примера: "Employee" или "Visitor"), в то время как hasAuthority() определяет права (для примера: один Employee может использовать только Admin_Root, но другой тоже может использовать User_Root. 32. Чем отличается InMemoryAuthentication от basicAuthentication?BasicAuthentication – это механизм чтения имени пользователя и пароля, а In-Memory Authentication - это механизм хранения. InMemoryAuthentication – означает, что пользователь хранится не в базе, а в оперативной памяти приложения до тех пор, пока оно запущено. И чтобы отредактировать пользователя, придется заново запускать приложение. Этот вариант полезен для экспериментов во время разработки. basicAuthentication – аутентификация путем сравнения пары идентификатор/пароль, зашифрованные с использованием кодировки base64 с теми, что хранятся в системе. Чтобы получить доступ к ресурсам (Resource), защищенные Basic Authentication, пользователь должен отправить request и в том request должна содержаться информация username/password прикрепленная на Header. Есть также и другие виды аутентификации: 1. LDAP – аутентификация. Lightweight Directory Access Protocol (LDAP) — протокол аутентификации учетных записей пользователей в организациях. Позволяет определять структуру пользователей и групп пользователей, назначать им права доступа. 2. Remember Me Authentication – это встроенный механизм распознавания, благодаря которому пользователям не нужно вводить учетные данные при каждом посещении сайта. Spring Security предлагает несколько способов реализации этого типа аутентификации — например, хеширование данных с помощью секретного ключа или хранение постоянного токена в базе данных. 3. OAuth 2.0 (Open Authorization 2.0) – это открытый стандарт проверки прав пользователя с помощью сервиса авторизации. Он также используется для реализации таких функций, как вход через учетные записи Facebook, Google и других крупных площадок. Настройка сервера авторизации и внедрение OAuth сопряжены с высоким риском и могут отнять много времени. В этом процессе легко ошибиться и создать уязвимость. Spring Security предлагает защитить сайт с помощью готовых инструментов — например, Auth0. 4. Управление сессией – Spring Security предоставляет механизмы для управления сеансом пользователя. Он создает эти механизмы контроля при входе в систему и уничтожает при выходе. Для обеспечения безопасности доступны дополнительные средства, которые помогают, например, избежать отслеживания сеансов. |