Security 如何在auth中使用JWT?
我最近决定回顾一下当前的身份验证流程和可用的解决方案。简单来说,我有两个感兴趣的选项:会话/Cookies和JWT 让我们看看第一个。Sessions是一种“古老而黄金”的技术,目前仍广泛用于大多数基于服务器的应用程序 会话/cookie的优点Security 如何在auth中使用JWT?,security,session,cookies,jwt,Security,Session,Cookies,Jwt,我最近决定回顾一下当前的身份验证流程和可用的解决方案。简单来说,我有两个感兴趣的选项:会话/Cookies和JWT 让我们看看第一个。Sessions是一种“古老而黄金”的技术,目前仍广泛用于大多数基于服务器的应用程序 会话/cookie的优点 易于使用 加密的 防止XSS攻击(使用httpOnly标志) 防止CSRF攻击(使用sameSite标志) 易于设置过期时间 通过设置适当的头文件,从服务器端轻松管理 可以使用会话存储(例如redis)进行扩展 缺点 小尺寸(4kb) 用于基于服务
- 易于使用
- 加密的
- 防止XSS攻击(使用
标志)httpOnly
- 防止CSRF攻击(使用
标志)sameSite
- 易于设置过期时间
- 通过设置适当的头文件,从服务器端轻松管理
- 可以使用会话存储(例如redis)进行扩展
- 小尺寸(4kb)
- 用于基于服务器的应用程序,不适合SPA(单页应用程序)
- 跨域请求问题
- 由于许多应用程序可以使用单个API,因此很难使用会话管理身份验证
- SSO(单点登录)-如何实现
- 需要额外的服务器来存储会话数据
- 需要为每个请求查询数据库(以检查用户id)
- 从本质上说是安全的
- 无状态,适用于任何平台(web、移动)
- 最适合Restful API
- 广泛用于SSO(单点登录)
- 不需要在服务器端查询数据库(检查用户id),因为令牌可以包含不可变的数据
- 在各方之间安全地传输数据很好,因为不可能伪造数据
- 较大的
- 不容易从服务器端管理
- 需要从客户端手动发送带有标题的邮件吗
localStorage
中很容易,但这当然不是一个好主意,因为它不安全,不易受到XSS攻击。饼干我认为,可能只是cookie而不设置会话,但必须与跨域请求斗争,并且不易受到CSRF攻击。你知道实现这一目标的正确方法吗?我还有一个大问题-在哪里存储?
另一方面,假设我们有水疗,它现在很流行。从
单页应用程序
如果您有一个没有相应后端服务器的单页应用程序(SPA),您的SPA应该在页面加载时请求新的令牌,并将它们存储在内存中,而无需任何持久性。要进行API调用,SPA将使用令牌的内存中副本
这是否意味着我必须在每次页面刷新时登录并获取令牌来吧,这不是办法。我希望用户保持登录状态
那么,回到使用会话/cookie的服务器端常规web应用程序?我个人更喜欢JWT,那么使用JWT的最佳方式/流程是什么?如果有任何明确的解释,我将不胜感激。谢谢大家! JWT本质上不安全。这不是一个好的或安全的标准 关于如何让用户登录SPA,您可以使用会话。将会话密钥存储在cookie中,然后向后端发送RESTAPI调用,以便在加载页面时加载用户/会话数据 或者,使用身份验证流,在用户加载应用程序时将其重定向到ID服务器。然后,ID服务器可以设置cookie并管理身份验证,而无需用户再次登录。这与您询问的SPA解决方案类似,但用户不会注意到太多