与表单身份验证相比,JWT在不安全网络上的安全性

时间:2016-08-20 17:09:11

标签: asp.net authentication jwt

我正在尝试学习JSON Web令牌(JWT),并使用Implement OAuth JSON Web Tokens Authentication in ASP.NET Web API and Identity 2.1 – Part 3中的文章系列成功完成了示例。

我读到了JWT,并且喜欢使用https://jwt.io/中的JWT调试器解码令牌。令牌未加密 - 只是编码。

我有一个使用forms authentication的现有ASP.Net网站。我打算将其作为Web API的一些功能,并使用JWT进行身份验证。

由于可以解码JWT,如果某些恶意黑客可以读取令牌,他们可以通过身份验证并获取对资源的访问权。

问题1 与ASP.Net形式认证相比,JWT的安全性如何?它是更多,更少或相等的安全网络和不安全网络?

问题2 文章"How to Avoid Session Hijacking in Web Applications" 图1说明了在Application_AcquireRequestState事件中验证登录期间发出session_id的IP地址的方法,以及所有后续请求的IP地址。如果会话ID存储在服务器中,则可以这样做。

如果我还将原始IP地址存储在JWT令牌上,是否有办法确保令牌不是伪造的(以验证每个请求中的原始IP地址和当前IP地址)?

参考

  1. Cookies vs Tokens. Getting auth right with Angular.JS
  2. Session hijacking attack
  3. What if JWT is stolen?
  4. Stealing JWT from authenticated user

1 个答案:

答案 0 :(得分:1)

JWT的内容可见性不是安全问题,因为内容受到保护,不会被数字签名更改。但是,如果攻击者可以访问令牌,他可以冒充用户。因此,如果可行则使用HTTPS并将令牌保存在安全存储中

如果要隐藏内容。 JWT可以与JWE加密一起使用。

表单身份验证可能会在cookie中使用不透明令牌来维护服务器会话。因此,如果您将JWT存储在标有HTTPOnly的cookie中,我会说安全级别或多或少相同。请注意,Cookie容易受到CSRF攻击。但是,将JWT存储在localStorage中或使用javascript访问它会使其容易受到XSS攻击。

在任何情况下,您都需要额外的安全措施,因此没有神奇的解决方案,并且取决于上下文

已编辑问题2(避免会话劫持验证IP地址

这种技术可以应用于JWT,只需将源IP地址添加到令牌即可。由于令牌已签名,您可以将源TCP IP地址与令牌地址进行比较以验证令牌源。

请注意,完全可以使用虚假的发件人IP发送数据,但回复将转到发件人使用的虚假IP地址,因此他们永远不会联系到攻击者。

但验证客户端IP有缺点,例如在移动设备中,当用户从wifi切换到4G时,IP会发生变化,然后当前令牌将被拒绝