我有一个授权服务器和多个oauth2资源服务器。所有这些都是使用springsecurityoauth2实现的。我还有使用授权代码流生成令牌的前端客户机。
我的情况是,如果刷新令牌的有效期是2小时,而访问令牌的有效期是1小时。首先获取令牌没有问题(两个令牌都是新的。1小时后,访问令牌过期。现在假设应用程序仅在另外30分钟(经过1.5小时)后使用现有刷新令牌重试新的访问令牌,并且生成新的访问令牌,有效期为1小时,比刷新令牌多出30分钟。在前端,我将令牌存储在cookies中,刷新令牌在30分钟后被删除。当我再次尝试使用auth代码流新获取令牌时,springoauth2服务器返回相同的过期刷新令牌和活动访问令牌。我的应用程序进入一个混乱的状态,即用户是否被授权,因为它只有访问令牌,即使在几次重试。
是否可以生成到期时间始终小于或等于刷新令牌的访问令牌?
2条答案
按热度按时间h22fl7wq1#
你应该换个新的
access_token
以及refresh_token
当您尝试使用新的身份验证代码流时。为此,你应该创建自己的AuthenticationKeyGenerator
这里提到的代币店。bqucvtff2#
我在token enhancer中处理过。我只得到新生成的访问令牌的到期时间和现有刷新令牌的到期时间。如果访问令牌的到期时间大于刷新令牌的到期时间,则将更新访问令牌的到期时间以刷新令牌的到期时间。下面是我的代码示例。
下面是如何在配置中设置tokenenhancer: