Я будую API RESTful, який використовує маркери JWT для автентифікації користувача (видається login
кінцевою точкою та надсилається після цього у всі заголовки), і маркери потрібно renew
оновити через певний час (викликаючи кінцеву точку, яка повертає оновлений маркер ).
Можливо, сеанс API користувача стає недійсним до закінчення терміну дії маркера, отже, всі мої кінцеві точки починаються з перевірки того, що: 1) маркер все ще дійсний і 2) сеанс користувача все ще дійсний. Немає можливості безпосередньо визнати недійсним маркер, оскільки клієнти зберігають його локально.
Тому всі мої кінцеві точки повинні сигналізувати моїм клієнтам про дві можливі умови: 1), що настав час відновити маркер або 2) про те, що сеанс став недійсним, і вони більше не мають доступу до системи. Я можу придумати дві альтернативи для своїх кінцевих точок, щоб сигналізувати своїм клієнтам, коли виникає одна з двох умов (припустимо, що клієнти можуть бути адаптовані до будь-якого варіанту):
- Поверніть код http 401 (несанкціонований), якщо сеанс став недійсним або поверніть код 412 (попередня умова не вдалася), коли маркер закінчився, і настав час зателефонувати до
renew
кінцевої точки, яка поверне код 200 (нормально). - Повернення 401 для сигналізації про те, що або сеанс недійсний, або маркер минув. У цьому випадку клієнт негайно викликає
renew
кінцеву точку, якщо вона повертає 200, то маркер оновлюється, але якщоrenew
також повертає 401, то це означає, що клієнт поза системою.
Яку з двох вищезазначених альтернатив ви б рекомендували? Який із них був би більш стандартним, простішим для розуміння та / або більш ВИПУСНИМ? Або ви б взагалі рекомендували інший підхід? Чи бачите ви явні проблеми чи ризики безпеки для будь-якого варіанту? Додаткові бали, якщо ваша відповідь містить зовнішні посилання, що підтверджують вашу думку.
ОНОВЛЕННЯ
Хлопці, будь ласка, зосередьтесь на реальному запитанні - яка з двох альтернатив http-коду для сигналізації про недійсне відновлення / сеанс найкраща? Не заважайте на те, що моя система використовує JWT та сеанси на сервері, це особливість мого API для дуже конкретних правил бізнесу, а не та частина, для якої я шукаю допомоги;)