Spring security 使用Spring oAuth2 impl,是否可以;降级“;刷新令牌授予期间访问令牌的作用域?

Spring security 使用Spring oAuth2 impl,是否可以;降级“;刷新令牌授予期间访问令牌的作用域?,spring-security,oauth-2.0,jwt,spring-security-oauth2,Spring Security,Oauth 2.0,Jwt,Spring Security Oauth2,我有两个客户机,一个公共客户机供通过我们的网页或本机应用程序登录的普通最终用户使用,另一个是用于我们的管理系统的机密客户机。两者都发布了两个JWT,一个访问令牌和一个刷新令牌 公共客户端不允许颁发管理员权限。访问令牌的寿命很短,刷新令牌的寿命无限 机密客户端可以发布管理范围。访问令牌的寿命很短,刷新令牌的寿命为24小时 使用Spring安全性及其oAuth2实现,刷新令牌过期后是否可以降级管理员用户?也就是说,一旦用户登录24小时,用户不会完全注销,但在下一次登录时,他将获得两个新的JWT,一个

我有两个客户机,一个公共客户机供通过我们的网页或本机应用程序登录的普通最终用户使用,另一个是用于我们的管理系统的机密客户机。两者都发布了两个JWT,一个访问令牌和一个刷新令牌

公共客户端不允许颁发管理员权限。访问令牌的寿命很短,刷新令牌的寿命无限

机密客户端可以发布管理范围。访问令牌的寿命很短,刷新令牌的寿命为24小时

使用Spring安全性及其oAuth2实现,刷新令牌过期后是否可以降级管理员用户?也就是说,一旦用户登录24小时,用户不会完全注销,但在下一次登录时,他将获得两个新的JWT,一个用于常规用户访问的访问令牌和一个用于该访问级别的匹配刷新令牌。我想我正在寻找Spring安全框架中的某种钩子,它允许我以定制的方式处理令牌过期。

关于你的问题,有一句话让我有点困惑,但我想详细说明其他方面,所以这不适合评论

。。。用户未完全注销,但在下次登录时,他将获得两个新的JWT,一个用于常规用户访问的访问令牌和一个用于该访问级别的匹配刷新令牌

下一次登录时,您的确切意思是什么?我的困惑是,如果目标不是注销用户,那么就不会是下一次登录。我猜这可能意味着,在刷新令牌到期时,您可能希望执行降级请求,并使用仍然有效的刷新令牌获得一对权限更少的新令牌

根据OAuth规范,您可以执行刷新令牌请求,并向服务器请求范围小于当前范围的访问令牌。但是,它还规定,如果返回新的刷新令牌,则该令牌需要与请求中包含的刷新令牌具有完全相同的作用域

P>个人,对于这种情况,我会考虑不要降级令牌,只是确保为了执行任何管理员相关的操作,用户必须是管理员<强>,并且实际上在24小时内提供了他的凭据< /强>。您可以通过跟踪给定用户实际执行登录的日期和时间(通过提供其凭据),然后根据该值授权管理员操作来实现这一点。通过这种方式,您可以增加机密客户端的刷新令牌的生存期,并且只有当管理员想要执行特权任务且当前令牌不够新鲜时,才强制他们再次登录


最后,还是关于的主题(重点是安全考虑部分)。。。当你说web app for the public client时,我假设它是一个基于浏览器的Javascript应用程序。如果这是正确的,通常不建议对这些应用程序使用刷新令牌,因为刷新令牌通常是长期存在的(在您的情况下,它们似乎永远不会过期),并且浏览器无法确保它们的安全存储。这增加了令牌泄漏的可能性,从而使攻击者能够在令牌的生命周期内访问应用程序。您可能有其他限制,使此安全考虑不适用,但我还是想提醒您注意。

对于“下一次登录”,我实际上是在“与后端的下一次交互”,对不起。我想我不能更改刷新令牌的范围这一事实确实回答了我的问题。你的建议是好的,除非我得到太多的管理互动。然后,我将失去分布式授权的好处,我的帐户服务的负载将增加。我可能会再次使用会话缓存。。。如果不使用刷新令牌模式,我如何让用户使用JWT登录,并且仍然能够(模拟)撤销令牌?我如何才能禁止使用name+pw登录的用户?使用承载令牌(自包含JWT)的缺点之一是令牌撤销变得更混乱,RFC 7009承认这一点,指出在这些情况下,可以使用授权服务器和资源服务器之间的后端交互来提供即时访问令牌撤销。我不相信有一个标准涵盖了这种互动。