У меня есть Node-сервер (с Koa), где я внедрил систему аутентификации с нуля с помощью JWT. Я читал много блогов и руководств, и я придумал этот поток, но я не уверен в клиентской стороне:
- [Клиент] POST
/signin
email = ... pass = ... - [Server] Проверьте pass ha sh (argon2), сгенерируйте токен JWT и отправьте его клиенту в качестве тела ответа и установите -Cook ie: token = jwtToken; обеспечения; httpOnly
- [Клиент]
localStorage.currentUser = jwtTokenPayload
- [Клиент] GET
/resource
=> Хорошо, это работает!
Обычно я сохраняю токен JWT в браузере как httpOnly secure cook ie, я не хочу хранить его в local / sessionStorage, затем я сохраняю полезную нагрузку токена JWT в localStorage, полезную нагрузку такую:
{
sub: 'someId',
email: 'me@gmail.com',
iat: 1234,
exp: 2345
}
Когда приложение загружается снова, я читаю localStorage и использую время истечения, чтобы проверить, вошел ли пользователь, поэтому я, конечно, могу перенаправить на /login
или /
в любом случае, я звоню /user/me
, чтобы получить профиль пользователя и проверить, действительно ли он вошел в систему.
Более того, срок действия токена истекает через 7 дней, поэтому я ' Я собираюсь позвонить /signin
при загрузке приложения, без электронной почты + pass, но с токеном JWT и ответить токеном fre sh с другой верностью 7d, это будет механизм refre sh.
Эта вещь работает, но я что-то упустил? Есть ли что-то небезопасное? Можно ли хранить токен JWT в качестве повара ie?