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

时间:2016-11-29 09:51:03

标签: security authentication session-cookies jwt express-jwt

我正在写我的单身汉,我需要弄清楚哪种认证/授权方法最适合我与之合作的公司。

所以我一直在比较会话和基于令牌的身份验证方法,但有几点我不清楚如何使用令牌以及它们如何比会话身份验证更好:

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

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

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

From this article:

  

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

这对我来说毫无意义。他似乎在说OAuth系统会阻止CSRF吗?我不太了解CSFR的工作方式,所以可能只是我这里空白,但据我所知,会话或令牌都不能防止这种情况,因为每个请求都不是唯一的。

修改 我刚刚意识到令牌可能阻止CSFR的原因是,如果另一个站点设法通过浏览器向您的服务器提交表单,则浏览器不会自动发送它。但这意味着如果从服务器上的cookie标头中提取令牌,那么令牌很容易受到影响,如果您使用JWT,那么它应该不会成为一个问题,因为它使用它自己的授权"标头,您必须使用JS设置。 但这仍然让scotch.io文章声称对我来说听起来像废话。

1 个答案:

答案 0 :(得分:4)

检查Cookies vs Tokens: The Definitive Guide以获取有关传统基于cookie的身份验证系统和更新的基于令牌的系统的特性的完整摘要。

  

TL; DR基于令牌的身份验证比以往更加重要。我们检查了cookie和基于令牌的身份验证之间的差异和相似之处,使用令牌的优势,以及解决开发人员关于基于令牌的身份验证的常见问题和疑虑。

我不是这个确切术语的忠实粉丝,因为你实际放在cookie中的东西也可以被认为是一个标记;大多数情况下,它是一个映射到某些服务器端数据的引用令牌,而所谓的基于令牌的身份验证则支持在令牌本身内携带数据的按值令牌(JWT - Learn JSON Web Tokens)。 / p>

  

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

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

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

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

用户X在两个应用程序中进行身份验证,因此将为应用程序CK和应用程序TK的令牌发出一个会话cookie。如果攻击者创建了恶意网站EV并诱骗用户X访问它,则可以从用户的浏览器中对应用CKTK执行自动请求。< / p>

但是,对于应用程序CK,用户X的浏览器将自动包含会话cookie,因此恶意网站EV刚刚访问受保护资源,而对于应用程序请求{ {1}}浏览器不会自动包含令牌。