问题仍然存在,我们必须在哪里存储JWT令牌,以便来自Javascript的AJAX请求可以在Authorization标头中使用它们。我看了以下资源。有些建议使用SessionStorage或LocalStorage,有些则建议使用不安全,但也不建议使用其他方法。另外,有些(链接3)建议将其存储为httpOnly cookie,这显然不是单页应用程序的解决方案。因此,如果我们将它们存储为non httpOnly cookie,则其与localStorage几乎相同。
How do I store JWT and send them with every request using react
请停止使用本地存储(https://dev.to/rdegges/please-stop-using-local-storage-1i04)
https://blog.logrocket.com/jwt-authentication-best-practices/
我知道可能没有针对此问题的特定解决方案,但是在生产环境中使用的解决此问题的策略可能会有所帮助。
由于安全是您的首要考虑因素,因此答案相对简单:您无法将JWT作为授权标头提供给服务器端应用程序。为此,将需要使用可访问Javascript的对象,这意味着JWT面临XSS攻击的风险。
当前唯一可用的安全方法是通过服务器应用程序生成该令牌,然后通过httpOnly安全cookie将其提供给客户端SPA。可以说,此cookie现在可能容易受到CSRF的攻击,但是,与XSS相比,它的风险较小。
随着每个后续的AJAX请求,该cookie将由浏览器自动提供。您的服务器应用程序(或应用程序服务器)也必须配置为通过该特定cookie接受JWT。
此技术适用于任何寻求保护对服务器端资源的请求的应用程序-单页应用程序或其他应用程序。