Аутентификация и авторизация в Spring
Вопрос
Объясните разницу между аутентификацией и авторизацией и где каждая происходит в Spring Security.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Аутентификация: установить личность, 401
Авторизация: проверить права, 403
Аутентификацию делают фильтры и AuthenticationManager
Результат в SecurityContextHolder
Авторизация: AuthorizationFilter по URL и @PreAuthorize на методах
Что могут спросить следом
- Как получить текущего пользователя в контроллере?
- Почему проверки только на фронтенде недостаточно?
Разбор
Аутентификация отвечает на вопрос «кто вы»: проверка пароля, токена или сертификата. Если она не прошла, ответ 401. Авторизация отвечает «что вам можно»: роли и права, отказ даёт 403. В Spring Security аутентификацию выполняют фильтры цепочки, например BearerTokenAuthenticationFilter, через AuthenticationManager и провайдеры, а результат, объект Authentication с authorities, кладётся в SecurityContextHolder. Авторизацию делает AuthorizationFilter по правилам URL и методная безопасность через @PreAuthorize. В контроллере пользователя получаю через @AuthenticationPrincipal. Проверки прав всегда на сервере: фронтенд можно обойти прямым запросом.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.