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(如果 ^)
并存储在本地存储或 cookie 文件 (^) 中。

c

JWT 是经过编码和签名的。它没有加密。所以它不应该包含敏感数据(例如密码)。

但如果您仍需要添加一些私有数据,请尝试 JWE(Json Web 加密)。

【讨论】:

以上是关于SPA 的 Cookie 与基于令牌的身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Laravel Sanctum 处理 SPA 和基于令牌的身份验证

SPA 使用的经过身份验证的 Rest API:如何获取用于登录和注册表单的 CSRF 令牌?

带有存储在 cookie 中的刷新令牌的 SPA - 如何使用 IdentityServer4 进行配置?

如何使用基于令牌的 HTTP 基本身份验证保护 MVC 4 .NET SPA 模板中的 WebAPI?

SPA中令牌存储和刷新的选项

基于令牌的身份验证的安全性