java - 如何使用微服务多个实例刷新请求 token

标签 java microservices access-token spring-cloud

场景:

当请求 token 过期并且来自不同服务实例的多个请求时,所有请求都通过远程 HTTP 调用请求新的请求 token ,同时后一个请求 token 将使前一个请求 token 无效。因为每次获取新 token 的请求都会使前一个 token 失效。生成请求 token 的服务是第三方服务,我们无法更改它。

问题:

  1. 我们的应用程序架构是基于微服务的,每个服务都会有多个实例,我如何在每个服务之间重用请求 token ?(也许将其存储在外部 Redis 中是一个选项)

  2. 在服务启动过程中,如何确保只有一个刷新 token 请求发送到第三方服务?

  3. 之后,当请求 token 过期时,我们如何更新它?

技术堆栈:

  • Java 8
  • SpringCloud
  • Redis
  • Rancher
  • MySQL

最佳答案

以下是您可以考虑的选项

  1. 创建一个新的用于 token 管理的微服务。所有微服务都会通过该Service访问第三方Auth组件

  2. 在 token 管理服务中,您创建一个 Spring Singleton bean,该服务启动时会自动初始化 (@Autowired)

  3. 在这个bean中,您可以拥有调用第三方API的逻辑

  4. 根据您的需求,您可以决定是否需要 Redis/memcache 等缓存服务或 RDBMS 表

  5. 在此 token 管理服务中,当您从第三方 API 收到 token 过期响应时,您可以拥有更新 token 的逻辑

关于java - 如何使用微服务多个实例刷新请求 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48760583/

相关文章:

java - Jtree removeFromParent() 创建空白

JavaFX:如何根据 GridPane 内动态创建的文本字段的值计算平均值?

azure - 微软图: verify with which secret an access token was obtained

java - 获取Map中排序的键和值

java - 对于密码过期的任何数据源,都需要基于 Spring 的应用程序的通用解决方案

maven - 项目结构应该如何使用带有 gradle 或 maven 的微服务?

oracle - Weblogic 上的 Netflix OSS/Spring Cloud

java - 将特定于应用程序的项目(如 API、数据库模型)和特定于平台的项目分开是个好主意吗?

android - 使用 Facebook 的访问 token 通过经过身份验证的用户 session 在 UIWebView 中显示粉丝页面

Android获取谷歌 token id