【问题标题】:OAuth2 authorization behind the LoadBalancerLoadBalancer 背后的 OAuth2 授权
【发布时间】:2020-09-29 18:27:57
【问题描述】:

我在负载均衡器 (F5) 后面运行 2 个 OAuth2 授权服务器实例。我正在使用JdbcTokenStore。一切正常,但有时我会收到错误“处理错误:InvalidGrantException,无效授权码:XXXXX”。 如果我只运行一个实例,我的服务工作正常,如果我运行两个实例,有时会失败。似乎如果负载均衡器在授权过程中混合对不同服务器的请求,一切都会失败。

我的问题是,我该如何解决这种问题?我应该在负载均衡器中使用 stickysession 吗?如果是,我什么时候可以使用 stickysession 确保高可用性?这是唯一的解决方案吗?

【问题讨论】:

    标签: java spring-boot spring-security load-balancing spring-oauth2


    【解决方案1】:

    我想您正在使用已经实现的 oauth2 授权服务器。在这种情况下,您需要确定他们在身份验证时是否使用会话,或者基于密钥签名的某些令牌系统。不同之处在于,当您使用密钥签名令牌时,例如带有签名的 JWT,连接是无状态的。服务器仅使用签名密钥验证请求中的传入令牌,因此有关该连接的信息不必存储在 memory/db 中。请注意,两台服务器必须使用相同的签名密钥,因此身份验证在每台服务器中都有效。在这种情况下,您不需要在负载均衡器中使用粘性会话。

    您可以使用基于 JWT 和签名密钥的身份验证模型实现自定义 oauth2 授权服务器。您可以实现会话身份验证,但两个服务器必须使用共享的 jdbc 令牌存储,因此每个服务器都知道另一个服务器的有效身份验证。否则,您将不得不使用您在回答中提出的粘性会话

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      相关资源
      最近更新 更多