场景:
当请求 token 过期并且来自不同服务实例的多个请求时,所有请求都通过远程 HTTP 调用请求新的请求 token ,同时后一个请求 token 将使前一个请求 token 无效。因为每次获取新 token 的请求都会使前一个 token 失效。生成请求 token 的服务是第三方服务,我们无法更改它。
问题:
我们的应用程序架构是基于微服务的,每个服务都会有多个实例,我如何在每个服务之间重用请求 token ?(也许将其存储在外部 Redis 中是一个选项)
在服务启动过程中,如何确保只有一个刷新 token 请求发送到第三方服务?
之后,当请求 token 过期时,我们如何更新它?
技术堆栈:
- Java 8
- SpringCloud
- Redis
- Rancher
- MySQL
最佳答案
以下是您可以考虑的选项
创建一个新的用于 token 管理的微服务。所有微服务都会通过该Service访问第三方Auth组件
在 token 管理服务中,您创建一个 Spring Singleton bean,该服务启动时会自动初始化 (@Autowired)
在这个bean中,您可以拥有调用第三方API的逻辑
根据您的需求,您可以决定是否需要 Redis/memcache 等缓存服务或 RDBMS 表
在此 token 管理服务中,当您从第三方 API 收到 token 过期响应时,您可以拥有更新 token 的逻辑
关于java - 如何使用微服务多个实例刷新请求 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48760583/