Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 如何在auth中使用JWT?_Security_Session_Cookies_Jwt - Fatal编程技术网

Security 如何在auth中使用JWT?

Security 如何在auth中使用JWT?,security,session,cookies,jwt,Security,Session,Cookies,Jwt,我最近决定回顾一下当前的身份验证流程和可用的解决方案。简单来说,我有两个感兴趣的选项:会话/Cookies和JWT 让我们看看第一个。Sessions是一种“古老而黄金”的技术,目前仍广泛用于大多数基于服务器的应用程序 会话/cookie的优点 易于使用 加密的 防止XSS攻击(使用httpOnly标志) 防止CSRF攻击(使用sameSite标志) 易于设置过期时间 通过设置适当的头文件,从服务器端轻松管理 可以使用会话存储(例如redis)进行扩展 缺点 小尺寸(4kb) 用于基于服务

我最近决定回顾一下当前的身份验证流程和可用的解决方案。简单来说,我有两个感兴趣的选项:会话/CookiesJWT

让我们看看第一个。Sessions是一种“古老而黄金”的技术,目前仍广泛用于大多数基于服务器的应用程序

会话/cookie的优点

  • 易于使用
  • 加密的
  • 防止XSS攻击(使用
    httpOnly
    标志)
  • 防止CSRF攻击(使用
    sameSite
    标志)
  • 易于设置过期时间
  • 通过设置适当的头文件,从服务器端轻松管理
  • 可以使用会话存储(例如redis)进行扩展
缺点

  • 小尺寸(4kb)
  • 用于基于服务器的应用程序,不适合SPA(单页应用程序)
  • 跨域请求问题
  • 由于许多应用程序可以使用单个API,因此很难使用会话管理身份验证
  • SSO(单点登录)-如何实现
  • 需要额外的服务器来存储会话数据
  • 需要为每个请求查询数据库(以检查用户id)
所以在现代世界,JWT来解决这些问题

JWT的优势

  • 从本质上说是安全的
  • 无状态,适用于任何平台(web、移动)
  • 最适合Restful API
  • 广泛用于SSO(单点登录)
  • 不需要在服务器端查询数据库(检查用户id),因为令牌可以包含不可变的数据
  • 在各方之间安全地传输数据很好,因为不可能伪造数据
缺点

  • 较大的
  • 不容易从服务器端管理
  • 需要从客户端手动发送带有标题的邮件吗
在读了很多关于这个话题的书之后,我仍然不知道如何正确处理JWT。让我们讨论一下客户端以及如何存储JWT

我想,大多数人都会发现将JWT存储在
localStorage
中很容易,但这当然不是一个好主意,因为它不安全,不易受到XSS攻击。饼干我认为,可能只是cookie而不设置会话,但必须与跨域请求斗争,并且不易受到CSRF攻击。你知道实现这一目标的正确方法吗?我还有一个大问题-在哪里存储?

另一方面,假设我们有水疗,它现在很流行。从

单页应用程序

如果您有一个没有相应后端服务器的单页应用程序(SPA),您的SPA应该在页面加载时请求新的令牌,并将它们存储在内存中,而无需任何持久性。要进行API调用,SPA将使用令牌的内存中副本

这是否意味着我必须在每次页面刷新时登录并获取令牌来吧,这不是办法。我希望用户保持登录状态


那么,回到使用会话/cookie的服务器端常规web应用程序?我个人更喜欢JWT,那么使用JWT的最佳方式/流程是什么?如果有任何明确的解释,我将不胜感激。谢谢大家!

JWT本质上不安全。这不是一个好的或安全的标准

关于如何让用户登录SPA,您可以使用会话。将会话密钥存储在cookie中,然后向后端发送RESTAPI调用,以便在加载页面时加载用户/会话数据

或者,使用身份验证流,在用户加载应用程序时将其重定向到ID服务器。然后,ID服务器可以设置cookie并管理身份验证,而无需用户再次登录。这与您询问的SPA解决方案类似,但用户不会注意到太多