我是ReST的新手,正在实施ReSTful令牌身份验证,尝试以标准方式在移动网络应用中使用Django-Rest-Framework JWT
我决定让移动应用程序检查过期日期,因为我读到的是ReSTFul,检查它的服务器要求它存储不是ReSTful的令牌
关于上述实施,我有一些安全问题:
1)无论获得多少令牌刷新,都无法获得一个令牌,攻击者可以完全访问用户的登录信息?
即使它超过了https,让我们说某种方式是攻击者检索到令牌,即ssl拦截器代理。显然,移动应用程序不允许他们登录,但是他们可以通过任何HTTP客户端使用令牌调用api来获取数据。
2)如果服务器认为所有令牌都有效,那么首先使用刷新令牌的目的是什么?
此处似乎没有前向安全性。但是,如果服务器存储了令牌并保持其到期日期,则将停止完整的用户妥协,但不会导致每次会话损害。显然,使用SSL拦截器,他们仍然可以危害用户,但需要捕获每次登录。但是,该实现并不是ReSTful。
答案 0 :(得分:1)
首先,过期的令牌是有效的令牌,但您可以在采取任何操作之前检查令牌是否已过期,并拒绝过期的令牌。您可以采取以下措施来提高应用的安全性:
您可以在令牌内添加哈希密码。因此,如果用户丢失了他/她的手机,当在其他设备中更改密码时,您可以使用旧密码哈希拒绝令牌。
这个并不完全是宁静的,但也不是那么糟糕:你可以在db中添加一个名为revokedTokens的表来跟踪令牌的id(显然你应该将它添加到令牌中)用户被撤销,如果你稍后会收到带有该令牌的请求,您可以拒绝它直到它过期。当它过期时,您可以从表中删除,因为过期的令牌无论如何都不会成为问题。
您可以在用户登录令牌时添加设备的主机名,并将其与请求的主机名进行比较,以获得ssl拦截器攻击的额外安全层。是的,这不是全面保护,但仍然好一点,因为除了从另一台设备发送令牌之外,攻击者还需要更改他/她的主机名。
希望这有帮助。