Ответ
Авторизация — это процесс проверки прав доступа аутентифицированного пользователя (или системы) к выполнению определённого действия или получению доступа к конкретному ресурсу.
Ключевое отличие от аутентификации:
- Аутентификация: "Кто ты?" (проверка личности, например, по логину/паролю).
- Авторизация: "Что тебе разрешено делать?" (проверка прав).
Основные модели авторизации:
-
Ролевой доступ (RBAC — Role-Based Access Control): Права назначаются ролям, а пользователям присваиваются роли.
// Пример с аннотациями Spring Security @PreAuthorize("hasRole('ADMIN')") public void deleteUser(Long userId) { /* ... */ } -
Детальный доступ на основе прав/атрибутов (ABAC — Attribute-Based Access Control): Решение принимается на основе атрибутов пользователя, ресурса, действия и контекста (время, местоположение). Более гибкая модель.
-
Мандатный доступ (MAC): Используется в системах с высокими требованиями к безопасности, где права назначаются централизованно.
Пример реализации проверки прав в коде:
// Проверка, является ли пользователь владельцем ресурса
@PreAuthorize("#userId == authentication.principal.id or hasRole('MODERATOR')")
public User updateUserProfile(Long userId, UserProfileDto profile) {
// Обновить профиль пользователя
}
Технологии и протоколы:
- OAuth 2.0 / OpenID Connect: Стандарты для делегированного доступа и аутентификации, часто используемые в веб-API и микросервисах.
- JWT (JSON Web Tokens): Токены, которые могут содержать claims (утверждения) о правах пользователя, проверяемые ресурсным сервером.
- Spring Security, Apache Shiro: Фреймворки для реализации авторизации в Java-приложениях.
Авторизация — критический компонент безопасности, который следует принципу минимальных привилегий: пользователь должен получать ровно те права, которые необходимы для выполнения его задач.