Как мне заставить AWS вернуть код состояния, показывающий, что срок действия JWT, используемого для авторизации, истек?

#amazon-web-services #jwt #authorization

#amazon-web-services #jwt #авторизация

Вопрос:

Я использую бессерверную платформу с AWS для разработки веб-приложения на основе API Gateway / Lambda. Я использую JWT для аутентификации и авторизации, создавая пользовательский авторизатор, который подключается к конфигурации шлюза API без сервера.

Моя стратегия при входе в систему заключается в выдаче токена «access», срок действия которого составляет 60 минут, а также токена «refresh», срок действия которого составляет 8 дней. Если пользователь попытается получить доступ к системе более чем через 60 минут после выдачи токена доступа, клиентское приложение вызовет API refresh_token, аутентифицированный токеном обновления (и это единственный API, который разрешает этот токен обновления), чтобы получить новую пару токенов. И поэтому пользователю нужно будет повторно вводить данные имени пользователя / пароля, только если они неактивны более 8 дней, в противном случае они продолжают обновлять токены, предоставляя системе шанс каждые 60 минут загружать их, если они были занесены в черный список.

Эта стратегия работает нормально, за исключением того, что я могу только найти, как принять или запретить доступ к API на основе синтаксического анализа JWT, а не передавать клиенту определенный код состояния («Токен истек — вам нужно обновить» что-то в этом роде).

Итак, в моей module.exports.user = (event, context, callback) => {} функции I callback('user','Deny',methodArn) , но это не дает никаких подсказок клиенту о том, почему запрос пользователя был отклонен.

Однако примечательно, что для этой ситуации нет стандартного кода состояния HTTP — только общий 401. Итак, есть ли лучший способ решить эту проблему, и я делаю это неправильно?

Комментарии:

1. Я идиот. Просто понял, что я могу посмотреть на JWT на стороне клиента, чтобы узнать, истек ли срок его действия, и, если да, обновить его. Не нужно тратить время на поездку на сервер и пытаться выяснить, почему он был отклонен.

Ответ №1:

Смотрите мой комментарий к исходному вопросу. Понял, что я могу проверить срок действия на клиенте и сразу перейти к обновлению, а не пытаться и не использовать его для аутентификации на сервере.