2015-12-01 5 views
1

Общий сценарий для аутентификации пользователя выполняет следующие действия:JWT Обновить Токен

  1. регистры пользователя и журналы в использовании своих учетных данных (имя пользователя/пароль)
  2. сервер проверяет учетные данные пользователя и, если действительно, возвращается access token и refresh token
  3. в access token отправляется на последующие запросы и, если он действителен, сервер отвечает запрошенный ресурс
  4. Когда access token уже не действует, повторный сервер квесты клиента, чтобы обеспечить refresh token для того, чтобы выпустить новый access token
  5. Сервер получает refresh token и две вещи могут случиться:
    • если refresh token действительно, новый access token выдается клиенту
    • если нет, то сервер запрашивает пользователя для аутентификации

для клиента, чтобы иметь возможность отправить access token в каждом запросе, токен должен храниться либо на браузере хранения (локальное/сеансовое хранилище), либо cookie, что делает его уязвимым для атак XSS (межсайтовых скриптов). Эта проблема может быть уменьшена, если мы установим короткое время жизни на access token.

Мой вопрос, однако, относится к refresh token. Этот токен должен иметь долгий срок службы, и поскольку мы используем его для получения нового access tokens, это будет проблемой, если злоумышленник перехватит его. Таким образом, сохранение этого токена на стороне клиента может быть не очень хорошей идеей, верно?

Но каковы альтернативы?

Можем ли мы сохранить его в наборе файлов cookie с флагом «httpOnly»? Но разве это не сделает его уязвимым для атак CSRF (Cross-Site Request Forgery)?

Можно ли зашифровать токен и сохранить его в хранилище браузера?

Заранее спасибо. С наилучшими пожеланиями!

ответ

0

, что делает его уязвимым для атак XSS (Cross-Site Scripting).

Чтобы уточнить, cookie уязвим только для атаки XSS, если на вашем сайте есть уязвимость, которая делает это возможным.

Можем ли мы сохранить его в наборе файлов cookie с флагом «httpOnly»? Но не будет , это сделает его уязвимым для атак CSRF (Cross-Site Request Forgery)?

Хотя httpOnly флаг не может быть использован в некоторых формах CSRF protection в связи с необходимостью для того, чтобы получить доступ к стороне клиента, маркировки печенья как httpOnly не увеличивает риск для вашей системы в любом случае - httpOnly является более ограничительным.

Безопасно ли зашифровать токен и сохранить его в браузере?

Не совсем потому, что кто-либо или что-либо, имеющее доступ к хранилищу браузера, может получить доступ к значению cookie и представить его. Неважно, какая форма требуется - зашифрована или нет - если ее можно использовать напрямую без внешнего ключа. Не беспокойтесь об этом слишком много - доверьтесь браузеру, чтобы он был защищен, однако убедитесь, что остальная часть вашего сайта максимально безопасна.

Вы правы, что refresh token рассматривается как более чувствительный, чем токен доступа. Вы можете сохранить это в файле cookie, однако убедитесь, что он установлен в httpOnly и имеет флаг secure, чтобы гарантировать, что он передается только через зашифрованные HTTPS-соединения.

+0

Прежде всего, спасибо за ваш ответ;) Что касается вашего первого пункта, то я пытаюсь сказать, что сохранение токена в файле cookie сделает его уязвимым для XSS, поскольку к этому файлу cookie должен быть обращен клиент -side (чтобы получить токен и использовать его в заголовке авторизации), и поэтому флаг «httpOnly» (который позволяет защитить от XSS) не будет установлен. Это неправильно? –

+0

Что касается вашего второго момента, я не уверен, что понимаю. Вы можете немного уточнить, пожалуйста? Еще раз спасибо;) –

+0

Да, первый комментарий правильный. Я бы просто перефразировал его и сказал, что файл cookie «может быть захвачен, если мой сайт будет уязвим для XSS». См. Эту статью [OWASP для хорошего объяснения CSRF] (https://www.owasp.org/index.php/Cross-Site_Request_Forgery_ (CSRF)). То, что я сказал, что наличие cookie httpOnly не делает вас уязвимым для CSRF. – SilverlightFox

Смежные вопросы