我在写我的单身汉,我需要弄清楚哪种身份验证/授权方法最适合我正在合作的公司。
所以我一直在比较基于会话和令牌的身份验证方法,但是关于令牌如何工作以及它们如何比会话身份验证更好,我还不清楚几点:
对我来说 100% 清楚的唯一好处是令牌可以从没有 cookie 存储的客户端使用,并且它们可以用于不同的子域和完全独立的域,因为它不会阻止浏览器的 CORS 策略。
- 我读到所有 cookie 都会随每个请求一起发送到原始域(除非将 cookie 设置为仅在安全连接上发送),这意味着令牌将在请求中出现两次,除非您当然进行身份验证来自另一个域的用户。这是一个正确的假设吗?
- 令牌如何验证服务器端?解密后,是根据用户名、密码和密钥/私钥进行检查,还是只是这里使用的密钥/私钥?
- 如果我在为服务器上的某个资源授权它们时需要用户名/用户 ID,我没有对其进行身份验证,如果我没有原始用户数据要检查,我可以盲目地信任这些凭据吗?
最后,许多文章声称令牌可以防止 CSRF。
CSRF:我们还将提供针对跨站点请求伪造 (CSRF) 的保护。用户很容易受到 CSRF 攻击,因为他们已经可以通过银行网站进行身份验证,并且可以在访问其他网站时利用这一点。”
这对我来说完全没有意义。似乎他是在说类似 OAuth 的系统会阻止 CSRF?我不太了解CSFR的工作原理,所以这里可能只是我的空白,但据我所知,会话或令牌都不能防止这种情况,因为每个请求都不是唯一的。
编辑: 我刚刚意识到令牌可能会阻止CSFR的原因是,如果另一个站点设法从您的浏览器向您的服务器提交表单,它不会由浏览器自动发送。但这意味着如果从服务器上的 cookie 标头中提取令牌可能会受到影响,如果您使用 JWT,这应该不是问题,因为它使用它自己的“授权”标头,您必须使用 JS 设置它。但这仍然让 scotch.io 文章声称对我来说听起来像是胡说八道。