likes
comments
collection
share

Spring-Security oauth2 设置永久token踩的坑

作者站长头像
站长
· 阅读数 14
  • 背景

周三下午17点左右,客服中心反馈广东平台同步数据到集团平台不成功,听到这个心里就隐隐约约猜到是啥,但为了验证自己的猜想就查看了相关的日志信息,

Spring-Security oauth2 设置永久token踩的坑靠,真的是token不可用(不应该啊,昨天刚刚改成永久不失效的呀),没办法只能再查一下,争取18点下班(嘿嘿嘿).

  • 业务背景

  • 因为业务的关系,公司部署的是一个主平台,多个子平台,子平台的用户信息和账号信息都得同步到主平台,这样就可以在主平台登录然后选择或者直接跳转到对应的子平台,同步的逻辑是用http接口实现的.
  • 因为之前业务和我前任的关系,oauth_client_details表中共用一个client_id,并设置了刷新时间,这就存在一个问题,A节点刷新token的话会导致B节点的token失效,而且每个子平台Redis设置缓存的时间可能存在不一致;这就导致了有子平台同步数据失败.
  • 有考虑过给每个子平台设置不同的client_id,但是随着业务的不断增长和子平台的增加维护成本太大了,跟栈长讨论了一下,决定是把token设置为永久token,反正都是平台间调用,不对外暴露.
  • 事故现场

相关配置

Spring-Security oauth2 设置永久token踩的坑 设置这个之前还是查了相关信息的

Spring-Security oauth2 设置永久token踩的坑 以为将access_token_validity和refresh_token_validity 设置为null就可以永久了(傻逼了,哈哈哈),不设置就是使用默认的值12个小时,难怪一天就失效了,这锅背的不怨啊. 调用一下Spring-Security oauth2获取token的接口 /auth/oauth/token?grant_type=client_credentials

Spring-Security oauth2 设置永久token踩的坑 expires_in 不返回才是永久的,说明没生效.

  • 正确的配置

根据官方相关的说明找到相关代码 org.springframework.security.oauth2.provider.token.DefaultTokenServices#createAccessToken Spring-Security oauth2 设置永久token踩的坑 org.springframework.security.oauth2.common.DefaultOAuth2AccessToken#isExpired

Spring-Security oauth2 设置永久token踩的坑 可以大胆推测如果access_token_validity为负数就是永久不过期的,说干就干,修改相关配置

Spring-Security oauth2 设置永久token踩的坑 调用相关接口

Spring-Security oauth2 设置永久token踩的坑 nice,看了一下时间17:50,可以准时下班,哈哈哈!

  • 总结

修改框架内置好的参数一定要读透相关表达的含义,错了别怕,胆大心细,大胆推测,动手证明.

转载自:https://juejin.cn/post/6998790732370673694
评论
请登录