使用外部API提供的相同访问令牌直至过期,由多个SpringBoot(客户端)微服务使用

问题描述 投票:0回答:1

我需要设计一个项目,其中基于 springboot 的应用程序具有多个微服务,利用外部 API 提供商托管的资源(多个 API)。

API 提供程序使用基于 OAuth2.0 客户端凭据的身份验证和授权。对于授权,会生成访问令牌,通过该令牌可以访问 API。他们还制定了保留相同令牌 55 分钟的政策。

并在此基础上需要导出解决方案。目前测试代码已根据设计草案完成。

面临的挑战:

如何以及在何处存储生成的令牌,以便在来自我们任何微服务的后续请求中使用。

解决方案草案:

  • 我想过使用 Hashmap 并将令牌存储到 55 分钟/过期。生成新令牌的逻辑将基于验证来检查已存储在 Hashmap 中的令牌的过期时间/剩余时间。如果在 55 分钟内,请从 Hashmap 中进行选择,否则将获得新的令牌。

我使用这种方法面临的挑战是,我创建的用于处理 API 调用之前的步骤的 Spring 组件正在传递一个新的 Bean 实例,因此每次都有一个新的 Hashmap 实例。

因此,令牌的重用失败,外部 API 提供商正在为每个 API 调用生成新的令牌。

请建议/建议跨会话/微服务/后续调用处理和维护具有令牌状态的 Bean 的方法。

假设:默认的bean类型始终是Singleton。因此,如果Bean配置为组件,那么它不应该为每个请求传递相同的bean实例吗?

谢谢。

spring security oauth-2.0 access-token boot
1个回答
0
投票

在我看来,在地图中存储令牌并不是最好的解决方案,如果您运行应用程序的多个实例,您将遇到可扩展性问题,要解决此问题您需要更多的输入数据,有些将令牌存储在客户端侧面,简化了流程,有些使用外部存储。

但是如果您喜欢您的解决方案,请在 utilClass 中将其设为静态 ConcurrentHashMap

© www.soinside.com 2019 - 2024. All rights reserved.