我正在尝试学习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地址)?
参考:
答案 0 :(得分:1)
JWT的内容可见性不是安全问题,因为内容受到保护,不会被数字签名更改。但是,如果攻击者可以访问令牌,他可以冒充用户。因此,如果可行则使用HTTPS并将令牌保存在安全存储中
如果要隐藏内容。 JWT可以与JWE加密一起使用。
表单身份验证可能会在cookie中使用不透明令牌来维护服务器会话。因此,如果您将JWT存储在标有HTTPOnly的cookie中,我会说安全级别或多或少相同。请注意,Cookie容易受到CSRF攻击。但是,将JWT存储在localStorage中或使用javascript访问它会使其容易受到XSS攻击。
在任何情况下,您都需要额外的安全措施,因此没有神奇的解决方案,并且取决于上下文
这种技术可以应用于JWT,只需将源IP地址添加到令牌即可。由于令牌已签名,您可以将源TCP IP地址与令牌地址进行比较以验证令牌源。
请注意,完全可以使用虚假的发件人IP发送数据,但回复将转到发件人使用的虚假IP地址,因此他们永远不会联系到攻击者。
但验证客户端IP有缺点,例如在移动设备中,当用户从wifi切换到4G时,IP会发生变化,然后当前令牌将被拒绝