junior
В чём разница между аутентификацией и авторизацией?
Аутентификация (Authentication) – проверка личности пользователя, ответ на вопрос «Кто ты?». Авторизация (Authorization) – проверка прав доступа, ответ на вопрос «Что тебе разрешено?».
Аналогия из жизни: паспортный контроль в аэропорту – аутентификация (вы – это вы). Проверка визы – авторизация (имеете ли вы право въехать в страну).
В Spring Security
Пример
HTTP запрос
|
Аутентификация (AuthenticationFilter)
"Кто ты?" -> проверка логина/пароля или токена
|
Авторизация (AuthorizationFilter)
"Что тебе можно?" -> проверка прав/ролей
|
Контроллер
Виды аутентификации
- По логину и паролю (Form Login, HTTP Basic)
- По токену (JWT, OAuth2)
- По сертификату (X.509)
- Многофакторная (пароль + SMS-код)
Виды авторизации
- На основе ролей (ROLE_ADMIN, ROLE_USER)
- На основе прав/authorities (READ_USERS, WRITE_USERS)
- На основе выражений (SpEL)
Ключевые интерфейсы
Authentication– представляет аутентифицированного пользователяUserDetails– информация о пользователе (логин, пароль, роли)UserDetailsService– загрузка пользователя по имениGrantedAuthority– право/роль
На собеседовании: ключевое – чёткое разделение понятий и порядок (сначала аутентификация, потом авторизация). Частая ошибка – путать
hasRole("ADMIN")иhasAuthority("ADMIN"):hasRole()автоматически добавляет префиксROLE_.