#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:
Смотрите мой комментарий к исходному вопросу. Понял, что я могу проверить срок действия на клиенте и сразу перейти к обновлению, а не пытаться и не использовать его для аутентификации на сервере.