我正在尝试学习JSON Web令牌(JWT),并使用ASP.NET Web API和Identity 2.1 –第3部分中的“实现OAuth JSON Web令牌身份验证”中的文章系列成功完成了示例。
我了解到JWT
并喜欢可以使用https://jwt.io/中的JWT调试器对令牌进行解码。令牌不加密-只是编码。
我有一个使用的现有ASP.Net网站forms authentication
。我计划将其作为Web API进行一些功能,并使用JWT进行身份验证。
由于可以对JWT进行解码,因此,如果某些恶意黑客可以读取令牌,则可以对它们进行身份验证并访问资源。
问题1与JASP.Net表单身份验证相比,JWT的安全性如何?是通过不安全的网络获得更多,更少或相等的安全性吗?
问题2文章“如何避免Web应用程序中的会话劫持”说明了一种用于验证登录期间向session_id发出IP的IP地址以及所有后续请求的IP地址的方法Application_AcquireRequestState
。如果会话ID存储在服务器中,则将有可能。
如果我也将原始IP地址存储在JWT令牌上,是否可以确保不伪造令牌(以在每个请求中验证原始IP地址和当前IP地址)?
参考文献:
JWT的内容可见性不是安全问题,因为可以通过数字签名保护内容免遭更改。但是,如果攻击者可以访问令牌,则他可以冒充用户。因此,请尽可能使用HTTPS并将令牌保存在安全的存储中
如果要隐藏内容。JWT可以与JWE加密一起使用。
表单身份验证可能会在cookie中使用一个不透明的令牌来维护服务器会话。因此,如果将JWT存储在标有HTTPOnly的cookie中,我会说安全级别或多或少是相同的。请注意,cookie容易受到CSRF攻击。但是,将JWT存储在localStorage中或可与javascript兼容将使其容易受到XSS攻击。
无论如何,您都需要采取额外的安全措施,因此没有神奇的解决方案,并且取决于上下文
只需将源IP地址添加到令牌中,就可以将这种技术以同样的方式应用于JWT。由于令牌已签名,因此您可以将源TCP IP地址与令牌地址进行比较,以验证令牌的来源。
请注意,完全有可能使用伪造的发送者IP发送数据,但是答复将转到发送者使用的伪造IP地址,因此它们将永远无法到达攻击者。
但是验证客户端IP有缺点,例如在移动设备中,当用户从wifi切换到4G时IP可能会更改,那么当前令牌将被拒绝
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句