【问题标题】:Spring Security Preauthorization Filter On Zuul To Establish and Share SessionZuul上的Spring Security预授权过滤器建立和共享会话
【发布时间】:2015-12-17 08:16:30
【问题描述】:

我在一个开发团队中从事一个使用基于 Spring 的微服务的大型项目。我们最近发现了 Spring Cloud 项目,并正在尝试实现 Netflix 服务、Zuul、Eureka、Ribbon 等。

在我们的环境中,除非通过外部服务获得预授权,否则任何人都无法访问我们的应用程序将在其上运行的域。一旦他们到达我们的应用程序,我们将能够通过授权服务提供的标头令牌获取用户的身份。

我希望 Zuul 使用预身份验证过滤器设置 Spring Security 以建立用户会话,并使用 Spring Session 使会话可用于所有后端微服务。

这是一种合法的方法吗?我能看到的关于 Zuul 安全性的唯一信息是将 OAuth2 令牌代理到后端服务的能力,但我们不需要 OAuth2。有没有更好的方法来建立用户会话并在我们的后端架构中的服务之间共享它?

【问题讨论】:

    标签: spring spring-security spring-cloud spring-session netflix-zuul


    【解决方案1】:

    请看下面Tutorial

    您可以跳转到GitHub上的代码

    我能够启动并运行项目,现在正在修改内存中的身份验证以使用 Ldap。我是 Java 新手,发现本教程非常简单。

    你的,

    迈克·科瓦尔斯基

    【讨论】:

    • 谢谢迈克尔,我自己也是偶然发现的。我实际上已经启动并运行了我的环境——Zuul 使用 Spring Security Preauth 过滤器并将会话外部化到 Redis。我的微服务还使用了 Spring Session 和 Spring Security,并在通过 Zuul 进行身份验证后正确地为请求获取用户主体。
    • 您是否成功地将 ldap 集成到示例中? ty
    • 请看看我在这里找到的答案stackoverflow.com/questions/32751094/…我正在成功连接到ldap。
    【解决方案2】:

    和你一样,我不需要 OAuth,并且发现 Zuul 在没有 OAuth 的情况下缺乏身份验证支持。我想在不丢失 Spring Cloud 发现和客户端负载平衡能力的情况下调用 auth 服务。我通过稍后装饰RibbonRoutingFilter 来实现这一点。请注意,这种方法需要禁用原始的RibbonRoutingFilter,这可以通过application.yml 中的一行来完成:zuul.RibbonRoutingFilter.route.disable: true

    基本上,在将请求委托给原始 RibbonRoutingFilter 之前,我会备份原始服务 ID 并使用身份验证服务 ID 覆盖它。如果认证成功,我恢复原来的服务ID,并再次将请求委托给原来的RibbonRoutingFilter。如果身份验证不成功,我会返回一个错误。我的 GitHub 上的完整代码:AuthAwareRoutingFilter.java

    【讨论】:

      猜你喜欢
      • 2011-10-29
      • 2021-10-28
      • 2018-12-11
      • 2021-10-31
      • 1970-01-01
      • 2023-03-05
      • 2014-11-04
      • 2018-08-23
      • 2020-04-25
      相关资源
      最近更新 更多