基于令牌的身份验证的替代方法

时间:2017-02-10 16:12:54

标签: authentication token restful-authentication

我有一个RESTful API,用户将通过一组Web /移动客户端访问,我试图弄清楚如何处理令牌身份验证。我的理解是传统的令牌认证工作原理如下:

  1. 用户通过提供用户/通行证,接收令牌并过期
  2. 进行身份验证
  3. 直到,每次请求都会传递令牌
  4. 到期时,请求新令牌(通过提供单独的“刷新”令牌或仅通过用户/通行证重新进行身份验证)
  5. 是否有充分的理由不为每个请求生成新令牌?即:通过user / pass请求初始令牌。此令牌与第一个API请求一起传递,该请求返回api响应的内容以及必须使用以下请求传递的新令牌...此方法的优点是用户采取的每个请求(操作)重置令牌身份验证的到期时间,使令牌到期时间基本上成为用户可以在不注销的情况下处于非活动状态的时间段。有没有理由不使用这种方法?上面提出的方法似乎更常见(这就是我要问的原因)。

    最后,一个只有轻微相关的问题。是什么阻止了正在观看网络的用户从用户那里获取令牌?特别是在第一个方案中,它似乎很容易做到(在第二种方法中,您需要捕获传入的请求,然后在用户执行之前快速获取下一个令牌)。

1 个答案:

答案 0 :(得分:2)

从我读到的是你想要一个用户通过身份验证的滑动窗口。到期窗口内的每个新请求都会延长会话时间。 如果我理解正确,我会提出另一种方法;每次成功验证请求时,请更新您拥有令牌的商店并更新到期时间。 通过这种方式,您无需每次都抓住新令牌而烦恼您的用户。 所以,是的,有一个很好的理由不这样做:它不是你的用例所必需的,只会让用户烦恼。

通过上述方法,我假设您有一个商店(数据库),您可以在其中保留您的令牌+到期日期。

所以这个过程是这样的:

  1. 用户提供用户名+密码
  2. 在商店中创建记录
  3. 为用户提供令牌
  4. 每次成功提出请求时更新商店
  5. 相关说明;不要给用户提供过期日期。例如,使用cookie时这很好,但这仅仅是一种额外的安全措施。

    关于你稍微相关的问题;如果你不使用TLS / SSL / HTTPS,没有什么能阻止任何人抓住令牌。始终使用TLS(SSL,或多或少是HTTPS)。