Gymterview
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_.