React frontend и REST API, CSRF

Взаимодействовать с интерфейсом REST API в качестве бэкэнд, авторизацией JWT, но как обрабатывать сеанс? Например, после входа в систему я получаю токен JWT от REST, если я сохраню его в localStorage, я уязвим для XSS, если я сохраню его в файлах cookie, те же проблемы, только если не задавать HttpOnly, но реагировать не могут читать HttpOnly Cookies (мне нужно прочитать cookie, чтобы взять jwt из него, и использовать этот jwt с запросами на отдых), также я не упоминал проблему CSRF, если вы используете REST в качестве backend, вы не можете использовать токен CSRF.

В результате React with REST кажется плохим решением, и мне нужно переосмыслить мою архитектуру, как быть? Можно ли предлагать пользователям безопасное реагировать на приложения, что все бизнес-логики обрабатываются на стороне REST API, не опасаясь потерять свои данные?

Update:

Насколько я понял, есть возможность сделать это:

  • React делает вызов AJAX API REST
  • React получает токен JWT от REST
  • React пишет httponly cookie
  • Поскольку реакция не может читать httponly cookie, мы используем ее как есть в нашем вызове REST, где нам нужна аутентификация.
  • REST on calls проверяет заголовок XMLHttpRequest, что-то вроде защиты CSRF.
  • Сторона проверки REST для cookie, прочитайте JWT и сделайте что-нибудь.

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

Ответы

Ответ 1

  • React делает вызов AJAX API REST

гарантировано, доступно множество доступных клиентских ресурсов клиента

  1. React получает токен JWT от REST

уверенный, это то, что должен сделать JWT

  1. React пишет httponly cookie

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

  1. Поскольку реакция не может читать httponly cookie, мы используем ее как есть в нашем вызове REST, где нам нужна аутентификация.

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

  1. REST on calls проверяет заголовок XMLHttpRequest, какая-то защита CSRF Сторона проверки REST для cookie, прочитайте JWT и сделайте что-нибудь.

уверена, как и большинство людей. Кроме того, привязать токен csrf к вашему собственному успокоительному lib, сэкономит вам много кодов

использовать токен пользователя в заголовке https://www.npmjs.com/package/express-jwt-token Authorization JWT < jwt token >

использовать токен csrf в заголовке https://github.com/expressjs/csurf req.headers['csrf-token'] - the CSRF-Token HTTP request header.

restful client https://github.com/cujojs/rest

реагировать с jwt https://github.com/joshgeller/react-redux-jwt-auth-example

Ответ 2

Ваш сервер может установить JWT файл cookie непосредственно в ответ на запрос входа.

Сервер отвечает POST /login на Set-Cookie: JWT=xxxxxx. Этот файл cookie является только http и, следовательно, не уязвим для XSS и будет автоматически включаться во все запросы на выборку от клиента (если вы используете withCredentials: true).

CSRF смягчается, как вы упомянули, см. OWASP для подробнее.