基于令牌的身份验证的替代方法
Alternate approaches to token based authentication
我有一个 RESTful API 用户将通过一组 web/mobile 客户端到达,我正在尝试弄清楚如何处理令牌身份验证。我的理解是传统的token auth是这样工作的:
- 用户通过提供 user/pass 进行身份验证,接收回令牌和过期时间
- 直到 ,每个请求都会传递令牌
- 到期后,将请求一个新令牌(通过提供单独的 'refresh' 令牌或仅通过使用 user/pass 重新验证)
是否有充分的理由不为每个请求生成新令牌?即:通过 user/pass 请求初始令牌。此令牌与第一个 API 请求一起传递,其中 returns api 响应的内容加上必须与以下请求一起传递的新令牌...这种方法的优势将是用户的每个请求(操作)采取 'resets' 令牌授权到期,这样令牌到期时间基本上成为用户可以在不注销的情况下处于非活动状态的时间段。有充分的理由不使用这种方法吗?上面列出的方法似乎更常见(这就是我问的原因)。
最后,一个稍微相关的问题。是什么阻止正在监视网络的人从用户那里获取令牌?特别是在第一种方案中,它似乎很容易做到(在第二种方法中,您需要捕获传入的请求,然后在用户之前快速获取下一个令牌)。
据我了解,您需要一个滑动 window 来验证用户身份。到期 window 内的每个新请求都会延长会话。
如果我理解正确,我会建议另一种方法;每次请求成功通过身份验证时,更新您拥有令牌的商店并更新到期时间。
这样您就不必为每次获取新令牌的所有麻烦而打扰您的用户。
所以,是的,有一个很好的理由不这样做:这对您的用例来说不是必需的,只会惹恼用户。
通过上述方法,我假设您有一个商店(数据库),您可以在其中保存您的令牌 + 到期日期。
所以流程是这样的:
- 用户提供用户名+密码
- 在商店中创建记录
- 给用户令牌
- 每次成功请求时更新存储
在相关说明中;不要给用户到期日期。例如,在使用 cookie 时这很好,但这仅作为附加安全措施有用。
关于你稍微相关的问题;如果您不使用 TLS/SSL/HTTPS,没有什么能阻止任何人获取令牌。始终使用 TLS(即 SSL,即 HTTPS,或多或少)。
我有一个 RESTful API 用户将通过一组 web/mobile 客户端到达,我正在尝试弄清楚如何处理令牌身份验证。我的理解是传统的token auth是这样工作的:
- 用户通过提供 user/pass 进行身份验证,接收回令牌和过期时间
- 直到 ,每个请求都会传递令牌
- 到期后,将请求一个新令牌(通过提供单独的 'refresh' 令牌或仅通过使用 user/pass 重新验证)
是否有充分的理由不为每个请求生成新令牌?即:通过 user/pass 请求初始令牌。此令牌与第一个 API 请求一起传递,其中 returns api 响应的内容加上必须与以下请求一起传递的新令牌...这种方法的优势将是用户的每个请求(操作)采取 'resets' 令牌授权到期,这样令牌到期时间基本上成为用户可以在不注销的情况下处于非活动状态的时间段。有充分的理由不使用这种方法吗?上面列出的方法似乎更常见(这就是我问的原因)。
最后,一个稍微相关的问题。是什么阻止正在监视网络的人从用户那里获取令牌?特别是在第一种方案中,它似乎很容易做到(在第二种方法中,您需要捕获传入的请求,然后在用户之前快速获取下一个令牌)。
据我了解,您需要一个滑动 window 来验证用户身份。到期 window 内的每个新请求都会延长会话。 如果我理解正确,我会建议另一种方法;每次请求成功通过身份验证时,更新您拥有令牌的商店并更新到期时间。 这样您就不必为每次获取新令牌的所有麻烦而打扰您的用户。 所以,是的,有一个很好的理由不这样做:这对您的用例来说不是必需的,只会惹恼用户。
通过上述方法,我假设您有一个商店(数据库),您可以在其中保存您的令牌 + 到期日期。
所以流程是这样的:
- 用户提供用户名+密码
- 在商店中创建记录
- 给用户令牌
- 每次成功请求时更新存储
在相关说明中;不要给用户到期日期。例如,在使用 cookie 时这很好,但这仅作为附加安全措施有用。
关于你稍微相关的问题;如果您不使用 TLS/SSL/HTTPS,没有什么能阻止任何人获取令牌。始终使用 TLS(即 SSL,即 HTTPS,或多或少)。