【问题标题】:How to load-balance Spring UsernamePasswordAuthenticationFilter when on different server在不同服务器上时如何负载平衡 Spring UsernamePasswordAuthenticationFilter
【发布时间】:2019-07-14 01:16:36
【问题描述】:

我目前正在开发一个需要非常可扩展的 REST 应用程序。根据我对负载平衡的了解,应该将实际应用程序拆分为独立的部分。到目前为止,我已经将创建帐户和登录与实际应用程序分开。我按照 this 教程来实现 JWT。这是最佳做法还是可以改进此解决方案?

但是,我将实际的 REST 应用程序作为一个单独的项目。显然,这两个应用程序需要协同工作。我怎样才能做到这一点?有没有办法存储令牌并在第二个应用程序中访问它?

有人叫我关注微服务架构according to this tutorial

非常感谢您的帮助!

【问题讨论】:

    标签: java spring jwt load-balancing


    【解决方案1】:

    使用该 auth0 博客中描述的 JWT 模式,服务被设计为无状态。事实上,示例代码明确禁用了 Spring 会话。授权所需的所有信息都完全包含在 JWT 令牌本身中并受到加密保护。

    因此,无需在多个服务/应用程序之间存储或共享令牌,只要它们都配置了相同的SECRET。每个负载均衡服务只需要使用JWTAuthorizationFilter 类验证客户端收到的令牌。

    从最佳实践的角度来看,考虑使用 oauth2 或 OpenID Connect 服务,而不是“手动”从每个服务发布 JWT 令牌。这可以是您自己的服务,也可以使用第三方服务,例如 auth0 或 okta。 (OpenID Connect 是 oauth2 的扩展)。

    你可以从https://auth0.com/blog/securing-spring-boot-apis-and-spas-with-oauth2/阅读更多关于oauth2的信息

    【讨论】:

    • 如果客户端在第一台服务器上登录,当我使用JWTAuthorizationFilter时,第二台服务器会接受令牌吗?
    • 另外,OAuth2 用于授予对第三方应用程序的访问权限,我认为这不是我需要的
    • 是的,只要两台服务器使用相同的秘密,第二台服务器就会接受令牌。此外,OAuth2 不仅用于授予对第三方应用程序的访问权限。许多(如果不是大多数)使用它来仅授予对他们自己的应用程序的 API 访问权限。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 2012-11-24
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    相关资源
    最近更新 更多