无状态令牌授权安全

Stateless Token Auth security

我是 ReST 的新手,正在实施 ReSTful 令牌身份验证,尝试以标准方式在移动网络应用程序中使用 Django-Rest-Framework JWT

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

的令牌

我有几个关于上述实施的安全问题:

1) 无论发生多少次令牌刷新,获得一个令牌不会让攻击者完全访问用户的登录吗?

即使是通过 https,假设攻击者通过某种方式检索了令牌,即 ssl 拦截器 proxy.Obviously 移动应用程序将不允许他们登录,但他们可以通过调用来获取数据api 通过任何 HTTP 客户端使用令牌。

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

this.However 中似乎没有前向安全性,如果服务器存储令牌并保留其到期日期,将停止完整的用户妥协,但不会停止每个会话的妥协。显然,使用 SSL 拦截器,他们仍然可以危害用户,但需要捕获每次登录。但是,该实现不是 ReSTful.

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

  • 您可以在令牌中添加散列密码。因此,如果用户丢失 his/her 手机,当密码在另一台设备上更改时,您可以拒绝使用旧密码哈希的令牌。

  • 这个不完全是 restful,但也不是那么糟糕:您可以在数据库中添加一个名为 revokedTokens 的 table 来跟踪令牌的 ID(显然你应该将它添加到令牌)用户撤销,如果你稍后收到带有该令牌的请求,你可以拒绝它直到它过期。当它过期时,您可以从 table 中删除,因为过期的令牌无论如何都不会成为问题。

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

希望这对您有所帮助。