Короткий ответ
Аутентификация отвечает на вопрос «кто ты» (подтверждение личности), авторизация — «что тебе разрешено» (права доступа к конкретным действиям и данным); успешный логин сам по себе не гарантирует доступ ни к одному защищённому ресурсу без отдельной проверки прав.
Как это работает подробнее
Аутентификация проверяет учётные данные (пароль, токен, сертификат) и подтверждает, что пользователь — тот, за кого себя выдаёт. Авторизация выполняется отдельно на каждом защищённом эндпоинте и сверяет роль/права аутентифицированного пользователя с требуемыми для операции.
Пример кода
request.http
GET /orders/777 HTTP/1.1
Authorization: Bearer <валидный токен пользователя A>
HTTP/1.1 403 Forbidden
Content-Type: application/json
{"error": "Токен валиден (authn пройден), но заказ 777 принадлежит другому пользователю (authz отклонён)"}Что использовать на практике
- Практика. В веб-API это обычно два отдельных слоя middleware: один декодирует и проверяет токен (authn), другой проверяет, например, что пользователь — владелец ресурса или имеет нужную роль (authz); пропуск второго слоя — частая причина уязвимостей вроде IDOR.
Подводные камни
- Риск. Проверяют только валидность токена и забывают проверить, что именно этому пользователю разрешено запрошенное действие (например, изменить чужой заказ по ID из URL); путают HTTP-коды 401 (не аутентифицирован) и 403 (аутентифицирован, но не авторизован).