Spring cloud Zuul-Api网关认证
我想通过SpringCloud将Zuul作为API网关介绍给一些服务 我对认证有一些设计上的疑问。 身份验证将由Spring Security处理,它位于servlet过滤器链中的Zuul之前 我关注的是:Spring cloud Zuul-Api网关认证,spring-cloud,netflix-zuul,Spring Cloud,Netflix Zuul,我想通过SpringCloud将Zuul作为API网关介绍给一些服务 我对认证有一些设计上的疑问。 身份验证将由Spring Security处理,它位于servlet过滤器链中的Zuul之前 我关注的是: 网关将位于许多服务的前面 某些服务可能会公开不需要身份验证的端点 有些服务可能会公开需要会话Id的端点,有些端点带有“令牌”,这是一个任意不透明的值(例如,如果您知道“难以猜测”的url,则下载文件) 在API网关/Spring安全性中,您可以配置具有特定身份验证要求的所有端点 在管理A
- 网关将位于许多服务的前面
- 某些服务可能会公开不需要身份验证的端点
- 有些服务可能会公开需要会话Id的端点,有些端点带有“令牌”,这是一个任意不透明的值(例如,如果您知道“难以猜测”的url,则下载文件) 在API网关/Spring安全性中,您可以配置具有特定身份验证要求的所有端点
- 您如何强制实际的服务团队为每个下游服务提供所需的设置
- 如何允许在网关中频繁更改身份验证设置(根据服务需要),而不必停止整个网关
Adrian我们正在使用Spring会话在Zuul边缘服务器后面的所有服务中复制会话。Zuul将对填充用户凭据的用户进行身份验证,并将经过身份验证的用户插入会话。然后在所有服务中复制该会话,每个服务负责自己的会话安全规则和设置。因此,实际上,Zuul所做的只是在spring security中查找用户,后端的服务根据用户的需要强制执行安全规则。这样,您可以独立更改每个服务,使网关成为一个哑代理 这方面的一个很好的例子是Dave Syers关于的教程。我还发布了与此相关的文章,其中包含了我们如何做的示例,这可能会有所帮助
- 网关将位于许多服务的前面
- 某些服务可能会公开不需要身份验证的端点
permitAll()
访问规则
- 一些服务可能会公开需要会话Id和一些 使用“令牌”,则为任意不透明值(例如下载 文件(如果您知道API网关/Spring中的“难以猜测”url) 安全性您可以使用其特定的 认证要求
ResourceServerSecurityConfigure#无状态(false)
并使用HttpSecurity#sessionManagement().sessionCreationPolicy(…)
激活会话,以便在每次收到有效访问令牌时创建会话。将在HTTP响应中放置JSESSIONID Cookie
- 您如何强制实际的服务团队为每个下游服务提供所需的设置
- 如何允许在网关中频繁更改身份验证设置(根据服务需要),而不必停止整个网关
ZuulRoute
s,前提是您将其用作独立的库。包装在Spring Security中,其上下文在启动时初始化一次。。。我怀疑您能否在运行时轻松更改安全配置
编辑评论中OP的以下精确性:如果您的团队应该对他们的安全规则负责,那么拥有一个集中的网关在设计上是矛盾的
我对微服务理念的理解是,每个应用程序都是独立的,负责其全部功能范围,安全/访问控制是其中的一部分。您可以在应用程序级别轻松地验证令牌(通过调用授权服务器或使用JWTs),每个应用程序定义每个资源所需的作用域。
SpringCloud已经有了一个,或者如果您使用“普通”SpringBoot,您可以轻松创建一个
这样,您就可以在任何地方部署单个应用程序(公共云或内部部署服务器),而无需依赖上游组件来实现安全性,也无需与其他团队同步网关配置部署
API网关很容易吸引人,但不要忽视风险和约束:
- 您将无法保护内部呼叫
- 您将不得不依赖上游网络组件,并将应用程序的输入视为理所当然
- 高级访问控制规则可能会让人头疼:如何获得用户的个人权限,等等
- 您必须与其他团队同步配置更改