【发布时间】:2018-02-14 14:51:08
【问题描述】:
根据这篇文章http://www.jianshu.com/p/b11accc40ba7 保护 JWT 的一种方法是 refreshToken:
在中心认证服务器中,我们维护一个这样的表:
table auth_tokens(
user_id,
jwt_hash,
expire
)
以下是工作流程:
用户用手机请求登录API,我们验证后,认证服务器发送一个令牌,并注册令牌(在表格中添加一行。)
当令牌过期时,用户使用旧令牌请求交换 API。首先身份验证服务器正常验证旧令牌,除了过期检查,然后创建令牌哈希值,然后通过用户 id 查找上表:
-
一个。如果找到的记录与 user_id 和 jwt_hash 匹配,则发出 new 令牌并更新表。
b.如果找到记录,但 user_id 和 jwt_hash 不匹配,则表示 有人曾经使用过该令牌交换了新令牌。令牌是 被黑,按 user_id 删除记录并用警报响应 信息。
c。如果没有找到记录,用户需要重新登录或只输入密码。 使用更改密码或登出时,按用户ID删除记录。
要持续使用token,合法用户和黑客都需要不断交换新的token,但只有一个可以成功,一个失败,下次交换时都需要重新登录。
所以如果黑客拿到了token,可以短时间使用,但是如果合法用户下次换新,就不能换新了,因为token有效期短,安全性更高。
如果没有黑客,普通用户也需要定期交换新令牌,比如每30分钟一次,这就像自动登录一样。额外的负载并不高,我们可以为我们的应用调整过期时间。
但想象一下这个情景:
例如,黑客获得了 Bob 的令牌,他知道 Bob 在凌晨 1:00 到 6:00 睡觉, 因此,黑客可以在晚上连续使用令牌,直到 Bob 第二天起床并使用该应用程序。
一个解决方案是在晚上,用户应该输入用户并通过而不是令牌,但这在我的想法中不是一个好的解决方案! 你知道更好的解决方案吗?
提前致谢
【问题讨论】:
标签: security authentication jwt json-web-token