我有一个RESTful API,这将是用户将通过一组Web /移动客户端达到,我想弄清楚如何处理令牌身份验证。我的理解是,传统的令牌身份验证的工作原理如下:基于令牌的身份验证的替代方法
- 用户auths中通过提供用户名/密码,接收回令牌和到期
- ,直到令牌传递的每个请求
- 到期后,新的请求令牌(通过提供单独的“刷新”令牌或仅通过用户/通过重新认证)
是否有一个很好的理由不为每个请求生成新的令牌?即:通过用户/密码请求初始令牌。该令牌与第一个API请求一起传递,该请求返回api响应的内容以及必须通过以下请求传递的新令牌...此方法的优点是每个请求(操作)重置'令牌auth的到期,使得令牌到期时间基本上变成用户可以不注销而不活动的时间段。有没有一个很好的理由不使用这种方法?上面列出的方法似乎更常见(这就是为什么我问)。
最后,只有一个稍微相关的问题。阻止正在观看网络的人从用户那里获取令牌?特别是在第一种方案中,似乎很容易做到(在第二种方法中,您需要捕获传入的请求,然后在用户执行操作之前快速获取下一个令牌)。
我正在使用python w/itsdangerous TimedJSONWebSignatureSerializer(一个JSON Web签名实现)。所以不,我不认为我正在使用数据库来存储令牌。并且因为过期是令牌的一部分,所以不能扩展它(您会得到一个新令牌)。澄清:API的'用户'是我自己的(最终用户不打算直接使用API,只使用其中一个客户端应用程序)。所以我最关心的是这种方法对安全性的影响。 – guywhoneedsahand
此外,“标准”模型中到期的原因是,客户可以知道何时请求新的令牌而不必击中资源,由于认证失败(令牌过期)而被拒绝,然后请求新鲜令牌。那有意义吗?很显然,在滑动认证窗口中,这不是必需的(这也是为什么它看起来像个好主意!) – guywhoneedsahand
将过期发送给客户端的确可以传达关于何时请求新令牌的信息。但不应该以客户可以改变它的方式使用它。 在JWT无法完成的情况下,这确实是一种替代方法。 由于您是API的唯一用户,因此您当然应该如何处理即将到期的令牌。无论如何你都需要做点什么。但是定期请求新令牌会更容易吗?保持一切美好和分离。 – harm