SPA 的 Cookie 与基于令牌的身份验证?
Posted
技术标签:
【中文标题】SPA 的 Cookie 与基于令牌的身份验证?【英文标题】:Cookie vs token based authentication for SPA? 【发布时间】:2015-10-29 21:30:02 【问题描述】:我正在使用 AngularJS 和 Spring 作为后端构建单页应用程序。 为了使我的后端无状态,我最近研究了 JWT(JSON Web Tokens)。现在这是混乱 -
一个。我应该将响应头上的 JWT 发送到客户端,然后通过 ngCookie 将其保存到 cookie 吗?如果是,我该如何处理 XSS 攻击?
b.我应该在后端生成的 cookie 中发送 JWT 并在客户端浏览器上设置 cookie 吗?
c。 JWT 安全吗? (由于我可以很容易地解码 JWT,顺便说一下,我将在 https 上运行我的应用程序)
如果有更好的方法来保护我的应用,我很想知道。
谢谢。
请分享任何信息。
【问题讨论】:
【参考方案1】:JWT 应该保存在本地存储中。观看此视频了解更多信息:
https://www.youtube.com/watch?v=X7t2pdJYHNI
JWT 不安全。您必须使用 https 来加密您的数据。
【讨论】:
在cookies中存储数据时为什么要保存在本地存储是非常可行的选择 如果您将其存储在 cookie 中并且不将其发送到标头中,您将错过一些好处(CORS、CSRF ...)。如果将其存储在cookie中并在header中发送,那只是浪费带宽。【参考方案2】:a + b
JWT 可以发送到:-
授权标头
请求正文
网址参数
cookie(如果 ^)
c
JWT 是经过编码和签名的。它没有加密。所以它不应该包含敏感数据(例如密码)。
但如果您仍需要添加一些私有数据,请尝试 JWE(Json Web 加密)。
【讨论】:
以上是关于SPA 的 Cookie 与基于令牌的身份验证?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Laravel Sanctum 处理 SPA 和基于令牌的身份验证
SPA 使用的经过身份验证的 Rest API:如何获取用于登录和注册表单的 CSRF 令牌?
带有存储在 cookie 中的刷新令牌的 SPA - 如何使用 IdentityServer4 进行配置?