【发布时间】:2016-12-19 15:15:29
【问题描述】:
在一般情况下,Web API 服务在用户发出的每个请求上发送一个新生成的令牌以便客户端应用程序必须用于下一个请求是否有意义?
我正在考虑使令牌过期的方法,但如果客户端应用正在使用 API 中的数据,则不需要再次登录。
我认为它很容易实现,但不确定是否存在用户体验或逻辑/安全问题。
【问题讨论】:
在一般情况下,Web API 服务在用户发出的每个请求上发送一个新生成的令牌以便客户端应用程序必须用于下一个请求是否有意义?
我正在考虑使令牌过期的方法,但如果客户端应用正在使用 API 中的数据,则不需要再次登录。
我认为它很容易实现,但不确定是否存在用户体验或逻辑/安全问题。
【问题讨论】:
这是一种现有技术,并使用了 auth0 在此处解释的 滑动会话 的概念:Refresh Tokens: When to Use Them and How They Interact with JWTs
滑动会话是在一段时间不活动后过期的会话。 当用户执行操作时,会发出一个新的访问令牌。如果用户使用过期的访问令牌,则会话被认为是非活动的,需要一个新的访问令牌。可以使用刷新令牌或需要凭据来获取此新令牌
【讨论】:
是的,Web API 服务为新用户发送新生成的令牌是有意义的,这样客户端应用程序就可以代表用户将其用于后续请求。
是的,您可以通过将令牌设置为短暂的来使令牌过期,给它们一个提前到期日期,以便用户可以在您在令牌到期日期中指定的特定时间段后重新进行身份验证。
当令牌即将到期时,您可以拥有一个更新它的端点。您还可以使用滑动会话。
滑动会话是在一段时间不活动后过期的会话。可以想象,这很容易使用访问令牌和刷新令牌来实现。当用户执行操作时,会发出一个新的访问令牌。如果用户使用过期的访问令牌,则认为会话处于非活动状态并且需要新的访问令牌。是否可以通过刷新令牌或新的身份验证轮获得此令牌,您作为开发人员必须确定。
现在,刷新令牌主要推荐用于移动应用,而不是网络应用。原因是刷新令牌真的很长寿,这就是移动应用程序用户几乎永远保持登录状态的方式。但是,在刷新令牌被劫持或泄露的情况下,您可以撤销它!
您可能想查看这个出色的 tutorial 以了解有关它们如何工作的更多信息!
哦@pedrofb已经提到了!
【讨论】:
我建议不要在每次请求时都刷新令牌。简单地说,我会做这样的事情来完成整个过程
首先,当用户向您的应用程序进行身份验证时,通过发送 他们的凭据
生成唯一令牌并将其作为对 客户
还创建一个客户端 cookie 并使用该令牌设置值,我们 还可以指定 cookie 何时过期,假设它每次过期 24小时
因此,在后续请求中,从您的客户端获取 cookie 并
将它附加到您的 HTTP ajax 库(例如 JQuery、RestyGWT、Apache
HttpClient 或一些 Android HTTP 库)作为Authorization :
your_cookie_token
接下来拦截来自服务器端的所有请求,检查是否
标头存在Authorization
最后得到 Header 值,它成为你的令牌,这样你就可以 出于安全原因对其进行一些验证。
您可以研究更多关于 cookie 安全性和基于令牌的身份验证/请求的信息。
【讨论】: