У меня есть базовый компонент Node.js на основе Koa для моего личного/хобби-приложения.Обработка срока действия JWT и обновление полезной нагрузки JWT
Я реализовал обработку сеанса с помощью токенов JWT. Клиент (AngularJS) получает токен после успешного входа и где-то хранит токен (в настоящее время находится в sessionStorage
, но для целей этого вопроса это не имеет значения).
У меня есть два вопроса:
Когда мне нужно обновить запись пользователя, которая представляет JWT, скажем, пользователь включил 2fa, поэтому я попросил его предоставить свой номер телефона, и я хотел бы чтобы установить этот номер телефона в записи пользователя. В настоящее время после успешной проверки номера телефона я вызываю свой сервер для обновления записи пользователя, и я создаю новый токен JWT с обновленной пользовательской записью (я исключаю конфиденциальную информацию из токена JWT, как хешированный пароль, но я бы хотел чтобы указать номер телефона для использования на стороне клиента). Можно ли создать новый токен, когда некоторые учетные данные меняются и обновляют существующий токен клиентской стороны с помощью этого нового токена? Должен ли я когда-либо создавать еще один токен, только для создания одного и только при успешной аутентификации? Как мне затем обновить полезную нагрузку в токене?
Как обращаться с истекшими токенами JWT? На мой взгляд, у меня есть 3 (возможных) сценария:
2.1. JWT настроен на короткое время жизни, скажем, 15 минут. Если сервер backend отвечает с 401 Unauthenticated 'Invalid token' (я думаю, это поведение по умолчанию
koa-jwt
), то я автоматически выхожу из своего клиента и требую повторной аутентификации. Но я также создал дополнительное промежуточное программное обеспечение, которое является последним в цепочке на бэкэнде, чтобы заново создать токен с обновленным сроком действия, и клиент также заменит существующий токен обновленным. Поэтому, если пользователь активен и использует приложение для каждого защищенного вызова API, в случае успеха создаст новый токен, чтобы заменить старый токен.2.2. JWT установлен долгоживущим, скажем, 1 неделя, и если он истекает, я откажусь от повторной аутентификации у клиента.
2.3. Скопируйте https://tools.ietf.org/html/rfc6749#section-1.5. Здесь при создании токена JWT после успешной аутентификации мы отправляем access_token, а также refresh_token. Когда срок действия access_token истек, и сервер отвечает с помощью HTTP 401 «недопустимый токен» (
koa-jwt
по умолчанию), клиент отправляет refresh_token в резервную копию, чтобы потребовать новый access_token (и, возможно, новый refresh_token). В этом случае я не совсем понимаю, как refresh_token проверяется против старого access_token, чтобы предоставить новый токен? Или почему нам нужно иметь refresh_token?
Любой общий совет по верхним темам (обновления JWT и истечение срока JWT) будет полезен.
Почему бы просто не использовать печенье? – Kebman