Mar*_*o S 5 rest api-design logout jwt
考虑到,根据定义,REST API是无状态的:"注销"操作是无用的吗?
我的意思是,我正在使用加密的JWT创建REST API.每个令牌都有一个到期时间,比方说,60分钟.如果我在数据库表上保存API生成的最后一个令牌,那么"注销"将从有效令牌表中删除它们.但是,如果我这样做,我理解API将不再是无状态的,对吧?
所以,我明白我不应该这样做.我正在考虑的唯一解决方案是将JWT到期时间缩短到5分钟,不执行"注销"操作并让令牌过期.
这是正确的方法吗?
自动令牌到期是一个明确的单独关注的“退出”机制,因此,它们都完全有效的行动,无论你的API是基于REST与否。
当用户注销时,他们会有意地决定使他们的访问令牌无效 - 例如,如果他们正在使用公共计算机或临时借用其他人的设备。
自动到期用于确保用户必须以某种方式定期重新验证。这有利于服务器端安全。
访问令牌与在客户端和服务器之间共享会话状态无关 - 完全有可能实现没有共享状态的访问令牌系统,并且令牌本身不实现会话状态,它仅用于验证用户是否是他们声称的身份. 因此,访问令牌实际上与 API 的状态无关。
我的意思是,我正在使用加密的JWT创建REST API
该JSON网络令牌(JWT)的标记编码所有关于授权进入令牌本身的数据.这种方法最重要的优点是您根本不需要用于令牌存储的后端存储.一个缺点是您不能轻易撤销访问令牌,因此它们通常被授予短期到期,并且撤销在刷新令牌处理.另一个缺点是,如果您在其中存储大量用户凭据信息,则令牌可能会变得非常大.因此,如果:
如果我在数据库表上保存API生成的最后一个令牌,那么"注销"将从有效令牌表中删除它们
那么你将失去使用JWT的最重要的优势,并且仍然具有所有这些缺点,这对我来说似乎是不合理的.
所以,我明白我不应该这样做.我正在考虑的唯一解决方案是将JWT到期时间缩短到5分钟,不执行"注销"操作并让令牌过期.
这是正确的方法吗?
在我看来,如果你打算使用JWT,是的!最好依靠令牌过期.有关此方法的更多详细信息,您可以查看此问题.
在REST API上"注销"无用吗?
无论您使用的是JWT还是类似于计算机科学上的任何其他体面问题,答案都是它取决于它.无状态的最重要优势是您的API可扩展性更高.如果您选择此路径,则可能需要对API上的每个请求进行身份验证,因为您可能需要在后端存储中搜索给定令牌或解码JWT令牌.因此,在这种情况下,您可能在单个节点上有一些性能成本,但从总体上看,您仍然具有可扩展性.我想我想说的是,如果你不需要那种可扩展性,你最好选择一种有状态的方法.否则,纯REST原则是要走的路.
| 归档时间: |
|
| 查看次数: |
6401 次 |
| 最近记录: |