Spring 在 Zuul 上建立和共享的安全预授权过滤器 Session

Spring Security Preauthorization Filter On Zuul To Establish and Share Session

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

在我们的环境中,在通过外部服务 pre-authorized 之前,任何人都无法访问我们的应用程序 运行 所在的域。一旦他们到达我们的应用程序,我们将能够通过授权服务提供的 header 令牌获取用户的身份。

我想让 Zuul 设置 Spring 安全性,使用预身份验证过滤器来建立用户的 session,并使用 Spring Session 使session 可用于所有 back-end 个微服务。

这是合法的做法吗?我能看到的关于 Zuul 安全性的唯一信息是能够将 OAuth2 令牌代理到 back-end 服务,但我们不需要 OAuth2。有没有更好的方法来建立用户的 session 并在我们的 back-end 架构中跨服务共享它?

请看下面Tutorial

您可以跳转到 GitHub

上的代码

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

你的,

迈克·科瓦尔斯基

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

基本上,在将请求委托给原始 RibbonRoutingFilter 之前,我备份了原始服务 ID 并用 auth 服务 id 覆盖它。如果auth成功,我恢复原来的service id,重新委托给原来的RibbonRoutingFilter请求。如果认证不成功,我return报错。我的 GitHub 上的完整代码:AuthAwareRoutingFilter.java