繁体   English   中英

无状态令牌验证安全

[英]Stateless Token Auth security

我是ReST的新手,正在实现ReSTful令牌认证,试图以标准方式在移动Web应用程序中使用Django-Rest-Framework JWT

  • 客户发送凭证
  • 服务器验证并发送回令牌和到期日期。 从数据库中删除令牌
  • 用户发出请求且令牌即将到期时,客户端调用刷新令牌
  • 根据客户端请求,服务器验证令牌签名
  • 过期的令牌移动应用程序注销用户。 移动应用检查到期时间而不是服务器

我决定让移动应用检查过期日期,因为我读到的是ReSTFul,并且服务器检查它是否要求它存储不是ReSTful的令牌

关于上述实现,我有一些安全问题:

1)无论刷新多少次令牌,获取一个令牌都不能使攻击者完全访问用户的登录信息吗?

即使通过https,也可以说是某种方式被攻击者检索到的令牌,即ssl拦截器代理。显然,移动应用程序不允许他们登录,但他们可以通过任何方式调用带有令牌的api来获取数据HTTP客户端。

2)如果服务器认为所有令牌都有效,那么首先具有刷新令牌的目的是什么?

似乎没有前向安全性,但是,如果服务器存储了令牌并保留了它们的到期日期,则将停止对用户的完全损害,但不会阻止每个会话的损害。 显然,使用SSL拦截器,它们仍然可以危害用户,但需要捕获每次登录。 但是,该实现并不可靠。

首先,过期的令牌是有效的令牌,但是您可以在执行任何操作之前检查令牌是否过期,并拒绝过期的令牌。 您可以采取几种措施来提高应用程序的安全性:

  • 您可以在令牌中添加哈希密码。 因此,如果用户丢失了手机,则在另一台设备上更改密码后,您可以拒绝带有旧密码哈希的令牌。

  • 这并不完全令人不安,但也没有那么糟糕:您可以在db中添加一个名为revokedTokens的表,该表可以跟踪被撤销的令牌ID(显然应该将其添加到令牌)中的用户,如果以后您收到使用该令牌的请求开启,您可以拒绝它,直到它过期。 当它过期时,您可以从表中删除它,因为过期的令牌将不再是问题。

  • 您可以在用户登录令牌时添加设备的主机名,并将其与请求的主机名进行比较,从而为ssl拦截器攻击提供额外的安全性。 是的,这不是全面保护,但仍要好一些,因为攻击者除了需要从其他设备发送令牌之外,还需要更改其主机名。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM