会话和基于令牌的身份验证之间的技术差异

2024-03-19

我正在写我的学士学位,其中我需要找出哪种身份验证/授权方法最适合我正在合作的公司。

因此,我一直在比较基于会话和基于令牌的身份验证方法,但对于令牌如何工作以及它们如何比会话身份验证更好,我不清楚以下几点:

我 100% 清楚的唯一好处是,令牌可以从没有 cookie 存储的客户端使用,并且它们可以与不同的子域和完全独立的域一起使用,因为它不会阻止浏览器 CORS 策略。

  • 我读到,所有 cookie 都会随每个请求发送到原始域(除非 cookie 设置为仅在安全连接上发送),这意味着令牌将在请求中出现两次,除非您进行身份验证来自另一个域的用户。这是一个正确的假设吗?
  • 服务器端如何验证令牌?解密后,是否对照用户名、密码和秘密/私钥进行检查,还是仅使用此处使用的秘密/私钥?
  • 如果我在为服务器上的某个资源授权时需要用户名/用户ID,但我没有对它们进行身份验证,如果我没有原始用户数据来检查,我可以盲目信任这些凭据吗?

最后,许多文章声称令牌可以防止 CSRF。

从这篇文章: https://scotch.io/tutorials/the-ins-and-outs-of-token-based-authentication

CSRF:我们还将针对跨站点请求伪造(CSRF)提供保护。用户很容易受到 CSRF 攻击,因为他们已经可以通过银行网站进行身份验证,并且在访问其他网站时可以利用这一点。”

这对我来说完全没有意义。他好像是在说类似 OAuth 的系统可以防止 CSRF?我不太了解 CSFR 的工作原理,所以可能只是我在这里是空白的,但据我了解,会话或令牌都不能防止这种情况,因为它们对于每个请求都不是唯一的。

Edit:我刚刚意识到令牌可能阻止 CSFR 的原因是,如果另一个站点设法从您的浏览器向您的服务器提交表单,则浏览器不会自动发送令牌。但这意味着如果从服务器上的 cookie 标头中提取令牌,则可能会受到影响,如果您使用 JWT,这应该不是问题,因为它使用自己的“授权”标头,您必须使用 JS 设置该标头。 但这仍然让 scotch.io 文章的说法对我来说听起来像是无稽之谈。


Check Cookie 与令牌:权威指南 https://auth0.com/blog/cookies-vs-tokens-definitive-guide/对传统的基于 cookie 的身份验证系统和最新的基于令牌的系统的特征进行了很好的总结。

TL;DR 基于令牌的身份验证比以往任何时候都更加重要。我们研究 cookie 和基于令牌的身份验证之间的差异和相似之处、使用令牌的优点,并解决开发人员对基于令牌的身份验证的常见问题和疑虑。

我不太喜欢这个术语,因为您实际放置在 cookie 中的内容也可以被视为令牌;大多数时候,它是映射到某些服务器端数据的引用令牌,而所谓的基于令牌的身份验证则倾向于按值令牌(JWT -学习 JSON Web 令牌 https://auth0.com/learn/json-web-tokens/)在令牌本身内携带数据。

JSON Web Token (JWT) 是一种开放标准 (RFC 7519),它定义了一种紧凑且独立的方式,用于在各方之间以 JSON 对象的形式安全地传输信息。该信息可以被验证和信任,因为它是经过数字签名的。

这些按值令牌的验证是通过签名完成的,签名确保令牌是由持有签名期间使用的关联密钥的实体创建的,并且内容不能被任何其他人在不知道密钥的情况下篡改。这个前提是信任收到的代币的基础。

就 CSRF 而言,基于令牌的系统确实会缓解这种情况,因为与 cookie 发生的情况相反,浏览器不会自动发送这些令牌凭证(假设令牌不作为 cookie 包含在请求中)。

想象一下以下应用程序CK公开受会话 cookie 和应用程序保护的资源TK公开受令牌保护的资源。

User X在两个应用程序中进行身份验证,因此将为应用程序发出一个会话 cookieCK和一个用于申请的令牌TK。如果攻击者创建了邪恶站点EV并欺骗用户X访问它,它可以对两个应用程序执行自动请求CK and TK从用户的浏览器中。

然而,对于应用CK用户的浏览器X将自动包含会话 cookie 和此类邪恶站点EV刚刚访问了受保护的资源,而对于应用程序的请求TK浏览器不会自动包含令牌。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

会话和基于令牌的身份验证之间的技术差异 的相关文章

随机推荐