Я создаю RESTful API, который использует токены JWT для аутентификации пользователя (выпущенные login
конечной точкой и отправленные во всех заголовках впоследствии), и токены необходимо обновить через фиксированное время (вызывая renew
конечную точку, которая возвращает обновленный токен ).
Возможно, что сеанс API пользователя становится недействительным до истечения срока действия токена, поэтому все мои конечные точки начинаются с проверки того, что: 1) токен все еще действителен и 2) сеанс пользователя все еще действителен. Нет возможности напрямую аннулировать токен, потому что клиенты хранят его локально.
Поэтому все мои конечные точки должны сигнализировать моим клиентам о двух возможных условиях: 1) что пришло время обновить токен или 2) что сеанс стал недействительным, и им больше не разрешен доступ к системе. Я могу придумать две альтернативы для моих конечных точек, чтобы сигнализировать своим клиентам, когда происходит одно из двух условий (предположим, что клиенты могут быть адаптированы к любому варианту):
- Верните код http 401 (неавторизованный), если сеанс стал недействительным, или верните код 412 (предварительное условие не выполнено), когда токен истек, и пришло время вызвать
renew
конечную точку, которая вернет код 200 (ok). - Возврат 401 для сигнализации о том, что либо сеанс недействителен, либо токен истек. В этом случае клиент немедленно вызовет
renew
конечную точку, если он возвращает 200, то токен обновляется, но еслиrenew
также возвращается 401, то это означает, что клиент находится вне системы.
Какой из двух вышеуказанных вариантов вы бы порекомендовали? Какой из них будет более стандартным, более простым для понимания и / или более RESTful? Или вы бы порекомендовали другой подход вообще? Видите ли вы какие-либо очевидные проблемы или угрозы безопасности с любым из вариантов? Дополнительные баллы, если ваш ответ включает внешние ссылки, которые поддерживают ваше мнение.
ОБНОВИТЬ
Ребята, пожалуйста, обратите внимание на реальный вопрос - какой из двух вариантов кода http для сигнализации о возобновлении / аннулировании сессии является лучшим? Не берите в голову тот факт, что моя система использует JWT и сеансы на стороне сервера, это особенность моего API для очень специфических бизнес-правил, а не та часть, для которой я ищу помощь;)