[英]Technical difference between session and token based auth
我在写单身汉时需要找出哪种认证/授权方法最适合与我合作的公司。
因此,我一直在比较基于会话和基于令牌的身份验证方法,但对于令牌如何工作以及它们比会话身份验证如何好,我仍然不清楚一些要点:
我唯一清楚地看到100%的好处是,可以从没有cookie存储的客户端使用令牌,并且可以将令牌与不同的子域和完全独立的域一起使用,因为这不会阻止浏览器的CORS策略。
最后,许多文章声称令牌可以抵御CSRF。
CSRF:我们还将提供针对跨站点请求伪造(CSRF)的保护。 用户很容易受到CSRF攻击,因为他们已经可以通过银行站点进行身份验证,并且可以在访问其他站点时加以利用。”
这对我来说绝对没有意义。 似乎他是在说类似OAuth的系统会阻止CSRF? 我对CSFR的工作原理不甚了解,所以在这里可能是空白的我,但据我所知,会话或令牌都无法防止这种情况发生,因为每个请求都不是唯一的。
编辑:我刚刚意识到令牌可能阻止CSFR的原因是,如果另一个站点设法从浏览器向服务器提交表单,则浏览器不会自动发送该令牌。 但是,这意味着如果从服务器上的cookie头中提取令牌,则很容易受到攻击,如果使用JWT,则不会有问题,因为它使用了自己的“ Authorization”头,必须与JS一起设置。 但这仍然使scotch.io文章声称对我来说似乎是胡说八道。
检查Cookie与令牌:《权威指南》 ,对传统的基于cookie的身份验证系统和最新基于令牌的系统的特征进行了很好的总结。
基于TL; DR令牌的身份验证比以往任何时候都更加重要。 我们研究了cookie和基于令牌的身份验证之间的异同,使用令牌的优势,并解决了开发人员对基于令牌的身份验证的常见问题和疑虑。
我不是这个确切术语的忠实拥护者,因为您实际放置在Cookie中的内容也可以被视为令牌。 在大多数情况下,它是一个按引用令牌,它映射到某些服务器端数据,而所谓的基于令牌的身份验证则支持按值令牌(JWT- Learn JSON Web Tokens ),该值令牌在令牌本身中携带数据。
JSON Web令牌(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息。 由于此信息是经过数字签名的,因此可以被验证和信任。
这些按值令牌的验证通过签名来完成,这些签名确保令牌是由持有签名时使用的关联密钥的实体创建的,并且在不了解密钥的情况下,其他任何人都无法篡改内容。 该前提是信任收到的令牌的基础。
对于CSRF,确实是基于令牌的系统可以缓解这种情况,因为与cookie所发生的情况相反,浏览器不会自动发送这些令牌凭据 (假定令牌未作为cookie包含在请求中)。
想象以下情况,应用程序CK
公开受会话cookie保护的资源,而应用程序TK
公开受令牌保护的资源。
用户X
在两个应用程序中都进行身份验证,因此将为应用程序CK
发出会话cookie,并为应用程序TK
发出令牌。 如果攻击者创建了恶意站点EV
并诱骗用户X
访问它,则它可以从用户的浏览器中向应用程序CK
和TK
执行自动请求。
但是,对于应用程序CK
,用户X
的浏览器将自动包含会话cookie,因此,恶意站点EV
刚刚访问了受保护的资源,而对于应用程序TK
的请求,浏览器将不会自动包含令牌。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.