JWT похожи на UserID и Password, вы не должны использовать localStorage для конфиденциальных данных, это не предназначено для этого. Прочитайте, например, эту хорошую статью и это видео YouTube:
https://dev.to/rdegges/please-stop-using-local-storage-1i04 и
https://medium.com/spektrakel-blog/local-storage-is-not-a-secure-place-9542cbfa904a
XSRF / CSRF можно избежать с помощью различной техники, читайте OWASP
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)
Обычный способ сделать это (Double Submit Cookie) - использовать токен xsfr, добавляемый в заголовок http / s каждого запроса, поскольку злоумышленник не может изменить заголовок http запроса.
В основном вам нужно отправить два куки:
1) HttpOnly Cookie с JWT
1) не-HttpOnly Cookie с xsrf-токеном
затем создайте Interceptor, который прочитает xsrf-токен из cookie и добавит заголовочный x-xsrf-token. Проверка на стороне сервера, равен ли xsrf-токен в JWT токену в x-xsrf-token (используйте неузнаваемый алогритм для xsrf-токена)
надеюсь, это поможет