Ответ
Тестирование токенов авторизации фокусируется на корректности их жизненного цикла и безопасности.
Основные сценарии для проверки:
-
Получение токена:
- Успешный запрос с валидными учетными данными возвращает
access_token(и частоrefresh_token). - Неуспешный запрос с неверными данными возвращает соответствующую ошибку (например,
401 Unauthorized).
- Успешный запрос с валидными учетными данными возвращает
-
Использование access token:
- Запрос к защищенному эндпоинту с валидным токеном в заголовке
Authorization: Bearer <token>успешен (200 OK). - Запрос без токена или с неверным/искаженным токеном возвращает
401.
- Запрос к защищенному эндпоинту с валидным токеном в заголовке
-
Истечение срока действия (expiration):
- Запрос с просроченным
access_tokenвозвращает401. Система должна требовать обновления токена или повторной аутентификации.
- Запрос с просроченным
-
Обновление токена (Refresh Flow):
- Отправка валидного
refresh_tokenна соответствующий эндпоинт возвращает новыйaccess_token. - Использование одноразового
refresh_tokenвторой раз должно завершаться ошибкой.
- Отправка валидного
-
Безопасность:
- Хранение: Проверить, что токен не передается в URL (GET-параметры) и не логируется. Для веб-приложений предпочтительно хранить в
httpOnlyкуках. - Валидация: Сервер должен проверять подпись токена (для JWT). Попытка использовать токен с измененной подписью (
"alg": "none"или поддельный signature) должна блокироваться.
- Хранение: Проверить, что токен не передается в URL (GET-параметры) и не логируется. Для веб-приложений предпочтительно хранить в
Пример запроса с токеном в Postman/cURL:
# Получение токена
curl -X POST https://api.example.com/auth/login
-H "Content-Type: application/json"
-d '{"username":"user","password":"pass"}'
# Использование токена для доступа к данным
curl -X GET https://api.example.com/api/profile
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."