是否可以在没有刷新令牌的情况下检查 JWT 有效性?
Posted
技术标签:
【中文标题】是否可以在没有刷新令牌的情况下检查 JWT 有效性?【英文标题】:Is it possible to check JWT validity without refresh tokens? 【发布时间】:2019-10-31 21:33:10 【问题描述】:由于某些原因,我不能在客户端使用刷新令牌,是否可以在 ResourceServer 上实现 RemoteTokenServices 以便它检查令牌在身份验证服务器上没有被撤销,但从 JWT 令牌本身获取身份验证信息,例如用户详细信息,而不是来自身份验证服务器,就像使用 uuid 令牌的默认实现一样?
更新:这个question 不是重复的,它是关于 JS 和一般的 方法,我对我解释的方法很好,我想知道是否以及如何使用 spring boot 和 spring security 来实现它。
【问题讨论】:
Invalidating JSON Web Tokens的可能重复 AFAIK 没有内置方法。你必须自己实现它。 【参考方案1】:JWT 由三个部分组成:
标题#关于使用算法的信息 有效负载 #contains 数据,这对你的情况很重要 签名#基本上是这个列表中前两项的哈希您应该在此处阅读有关 Payload(和 JWT 本身)的信息 https://jwt.io/introduction
长话短说,您可以在有效负载中包含公共数据。如果涉及到提到的RemoteTokenServices
- 当然,你可以这样做,但我不确定这是否是个好主意。您可以将公共expiration-date
(或expires
)属性添加到有效负载。
另外,看看这个:https://jwt.io/
【讨论】:
谢谢,虽然我确实知道 JWT 的结构和用途,但可能我不够清楚:我需要的是能够在不让用户重新验证的情况下进行长时间运行的用户会话,并且出于安全原因在身份验证服务器上结束用户会话的能力。这通常使用刷新令牌来完成,但第三方客户端不能使用它们。所以我想检查身份验证服务器上的令牌撤销,但不想从那里获取所有用户信息。恐怕有效载荷中的过期数据对我没有帮助。 很遗憾,我无法为您提供确切的实现,但您可以添加自定义过滤器。用户将向特定端点(例如 /extend-token)发出请求。然后,该过滤器将检查有效性并生成新令牌或延长同一令牌的生命周期。然而,最简单的解决方案就是赋予令牌几乎无限的生命周期。您还应该考虑此类行为的安全原因。如果有人获得了令牌,则该人可以无限期地利用它。以上是关于是否可以在没有刷新令牌的情况下检查 JWT 有效性?的主要内容,如果未能解决你的问题,请参考以下文章