我有一个RESTful API,用户将通过一组Web /移动客户端访问,我试图弄清楚如何处理令牌身份验证。我的理解是传统的令牌认证工作原理如下:
是否有充分的理由不为每个请求生成新令牌?即:通过user / pass请求初始令牌。此令牌与第一个API请求一起传递,该请求返回api响应的内容以及必须使用以下请求传递的新令牌...此方法的优点是用户采取的每个请求(操作)重置令牌身份验证的到期时间,使令牌到期时间基本上成为用户可以在不注销的情况下处于非活动状态的时间段。有没有理由不使用这种方法?上面提出的方法似乎更常见(这就是我要问的原因)。
最后,一个只有轻微相关的问题。是什么阻止了正在观看网络的用户从用户那里获取令牌?特别是在第一个方案中,它似乎很容易做到(在第二种方法中,您需要捕获传入的请求,然后在用户执行之前快速获取下一个令牌)。
答案 0 :(得分:2)
从我读到的是你想要一个用户通过身份验证的滑动窗口。到期窗口内的每个新请求都会延长会话时间。 如果我理解正确,我会提出另一种方法;每次成功验证请求时,请更新您拥有令牌的商店并更新到期时间。 通过这种方式,您无需每次都抓住新令牌而烦恼您的用户。 所以,是的,有一个很好的理由不这样做:它不是你的用例所必需的,只会让用户烦恼。
通过上述方法,我假设您有一个商店(数据库),您可以在其中保留您的令牌+到期日期。
所以这个过程是这样的:
相关说明;不要给用户提供过期日期。例如,使用cookie时这很好,但这仅仅是一种额外的安全措施。
关于你稍微相关的问题;如果你不使用TLS / SSL / HTTPS,没有什么能阻止任何人抓住令牌。始终使用TLS(SSL,或多或少是HTTPS)。