LoadBalancer背后的OAuth2授权。

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

我在负载均衡器(F5)后面运行了2个OAuth2授权服务器实例。我使用的是 JdbcTokenStore. 一切都很正常,但有时我得到一个错误的""。处理错误。InvalidGrantException, Invalid authorization code: XXXXX".我的servise工作正常,如果我只运行一个实例,有时失败,如果我运行两个实例。似乎如果负载均衡器在授权过程中混合向不同服务器的请求,一切都会失败。

enter image description here

我的问题是,如何解决这种问题?我应该使用 粘性会话 负载均衡器中?如果是,我如何确保高可用性与 粘性会话? 这是唯一的解决方案吗?

java spring-boot spring-security load-balancing spring-oauth2
1个回答
0
投票

我想你使用的是已经实现的 oauth2 授权服务器。在这种情况下,你需要找出他们在认证时使用的是session,还是一些基于密钥签名的token系统。不同的是,当你使用密钥签名令牌时,比如JWT与签名,连接是无状态的。服务器只验证带有签名密钥的请求中的传入令牌,因此关于该连接的信息不必存储在 memorydb 中。需要注意的是,两个服务器必须使用相同的签名密钥,因此认证在每个服务器上都是有效的。在这种情况下,你不需要在负载平衡器中使用sticky session。

你可以实现自定义的oauth2授权服务器,认证模型基于JWT的签名密钥。你可以实现会话认证,但是两个服务器必须使用共享的jdbc token存储,所以每个服务器都知道对方的有效认证。否则,你将不得不使用你在答案中提出的粘性会话。

比如Oauth2资源服务器是基于JWT的,有签名密钥。

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