【发布时间】:2018-07-23 10:56:21
【问题描述】:
场景:
当请求令牌过期并且来自不同服务实例的多个请求都通过远程HTTP调用请求新的请求令牌时,同时后一个请求令牌将使前一个请求令牌无效。因为每次获取新令牌的请求都会使前一个无效。生成请求令牌的服务是第三方的,我们无法更改。
问题:
我们的应用架构是基于微服务的,每个服务会有多个实例,如何在每个服务之间重用请求令牌?(也许将其存储在外部 Redis 中是一种选择)
在服务启动过程中,如何确保只有一个刷新令牌请求发送给第三方服务?
之后,当请求令牌过期时,我们如何更新它?
技术栈:
- Java 8
- SpringCloud
- Redis
- 牧场主
- MySQL
【问题讨论】:
-
您的每个服务是否都通过第三方令牌提供商验证令牌?它是否也与用于身份验证的身份相同?
-
A1:它是一个服务(比如 BookingService),但我们同时运行多个 BookingService 实例。 A2:是的。
-
身份验证服务器不太可能为您的 api 流中的每个服务验证令牌。您有一种验证令牌的方法(公钥)。话虽如此,如果您想在您的场景中拨打电话,您确实需要一项可以为您管理身份验证请求的服务。您可以在单台机器上运行它。如果确实出现了多个预订服务实例,他们将多次调用令牌服务,这只会向您的第三方服务提供一项服务,然后缓存令牌,除非它过期。或者如果您不想编写服务,请查看分布式锁。
标签: java microservices access-token spring-cloud