Общий сценарий для аутентификации пользователя выполняет следующие действия:JWT Обновить Токен
- регистры пользователя и журналы в использовании своих учетных данных (имя пользователя/пароль)
- сервер проверяет учетные данные пользователя и, если действительно, возвращается
access token
иrefresh token
- в
access token
отправляется на последующие запросы и, если он действителен, сервер отвечает запрошенный ресурс - Когда
access token
уже не действует, повторный сервер квесты клиента, чтобы обеспечитьrefresh token
для того, чтобы выпустить новыйaccess token
- Сервер получает
refresh token
и две вещи могут случиться:- если
refresh token
действительно, новыйaccess token
выдается клиенту - если нет, то сервер запрашивает пользователя для аутентификации
- если
для клиента, чтобы иметь возможность отправить access token
в каждом запросе, токен должен храниться либо на браузере хранения (локальное/сеансовое хранилище), либо cookie, что делает его уязвимым для атак XSS (межсайтовых скриптов). Эта проблема может быть уменьшена, если мы установим короткое время жизни на access token
.
Мой вопрос, однако, относится к refresh token
. Этот токен должен иметь долгий срок службы, и поскольку мы используем его для получения нового access tokens
, это будет проблемой, если злоумышленник перехватит его. Таким образом, сохранение этого токена на стороне клиента может быть не очень хорошей идеей, верно?
Но каковы альтернативы?
Можем ли мы сохранить его в наборе файлов cookie с флагом «httpOnly»? Но разве это не сделает его уязвимым для атак CSRF (Cross-Site Request Forgery)?
Можно ли зашифровать токен и сохранить его в хранилище браузера?
Заранее спасибо. С наилучшими пожеланиями!
Прежде всего, спасибо за ваш ответ;) Что касается вашего первого пункта, то я пытаюсь сказать, что сохранение токена в файле cookie сделает его уязвимым для XSS, поскольку к этому файлу cookie должен быть обращен клиент -side (чтобы получить токен и использовать его в заголовке авторизации), и поэтому флаг «httpOnly» (который позволяет защитить от XSS) не будет установлен. Это неправильно? –
Что касается вашего второго момента, я не уверен, что понимаю. Вы можете немного уточнить, пожалуйста? Еще раз спасибо;) –
Да, первый комментарий правильный. Я бы просто перефразировал его и сказал, что файл cookie «может быть захвачен, если мой сайт будет уязвим для XSS». См. Эту статью [OWASP для хорошего объяснения CSRF] (https://www.owasp.org/index.php/Cross-Site_Request_Forgery_ (CSRF)). То, что я сказал, что наличие cookie httpOnly не делает вас уязвимым для CSRF. – SilverlightFox