Внедрение JWT правильно - PullRequest
       32

Внедрение JWT правильно

0 голосов
/ 17 февраля 2019

Я занимаюсь разработкой веб-сайта с фреймворком django rest, фреймворком django jwt для backend и next.js, реагируем, редуцируем для frontend.

С предположением,

  • хранить токен доступа в виде куки, а не в localStorage.Потому что я использую Next.js и хочу получить токен доступа перед начальным рендерингом.

  • JWT с JEST Framework JJT JWT Search GitHub

  • Когда пользователь входит в систему, сервер отправляет токен доступа в виде файлов cookie

  • Срок действия токена доступа и обновления указаны ниже

'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300),
'JWT_ALLOW_REFRESH': True,
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
'JWT_AUTH_COOKIE': 'token'

Исходя из вышеизложенного, у меня есть несколько вопросов.

  1. Когда и как обновить токен

Срок действия токена истекает через 5 минут.В течение 5 минут пользователь может запросить страницу с permission_classes = (IsAuthenticated,) с токеном доступа.По прошествии 5 минут файлы cookie (токен доступа) автоматически исчезают, и пользователю необходимо снова войти в систему.Чтобы избежать этого, существует система обновления токенов, верно?Если это правильно, когда и как обновить токен правильно?Прежде чем запрашивать бэкэнд с токеном доступа, всегда сравнивайте срок действия токена доступа с текущим временем, затем, если он скоро истечет, прекратите запрашивать один раз, сначала переключитесь на обновление токена с помощью axios, после получения нового токена перезапустите запрос с новым токеном.. Это правильный путь?

токен доступа исчезнет, ​​если срок его действия истек

Потому что это куки, верно?Например, после входа в систему пользователь ушел с компьютера на 10 минут.Пользователь вернулся и попытался зайти на сайт, но ему нужно снова войти в систему.Потому что в куки больше нет токена доступа, а также он не может обновить токен.Что мне делать?

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

1 Ответ

0 голосов
/ 17 февраля 2019

Вы можете использовать концепцию "перехватчик", например, axios имеет его, вы можете добавить перехватчик ответа, и если сервер возвращает специальную ошибку ("token_expired"), тогда этот перехватчик будетполучить доступ к API refresh-token с помощью имеющегося у него маркера обновления, получить новый токен доступа и повторить последний неудачный запрос.

Оформить первый ответ здесь: https://github.com/axios/axios/issues/934#issuecomment-322003342

Надеюсь, это понятно.

...