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
гарантировано, доступно множество доступных клиентских ресурсов клиента
- React получает токен JWT от REST
уверенный, это то, что должен сделать JWT
- React пишет httponly cookie
Я так не думаю, что это не должно работать, но сессия не такая уж важная вещь, она скоро устареет и перепроверяет пароль по ключевым операциям, даже хакеры получили это в очень сжатые сроки, вы можете привязывать токен сеанса вместе с IP при входе пользователя в систему и проверять его на своем бэкэнд-сервере. Если вы хотите, чтобы он был наиболее защищен, просто сохраните токен в памяти и повторите вход в систему при открытии новой страницы или обновлении страницы
- Поскольку реакция не может читать httponly cookie, мы используем ее как есть в нашем вызове REST, где нам нужна аутентификация.
заверить, проверить пользователей и разрешений через токен входа, например csrf, вы можете поместить свой токен входа в свой заголовок запроса и проверить его на своем бэкэнд-сервере.
Привяжите логин входа в свою собственную резервную папку, которая сохранит вам много кодов.
- 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 для подробнее.