小编wbi*_*ler的帖子

Spring Cloud Netflix Zuul,CSRF和表单提交

我在Spring Cloud和CSRF保护方面遇到了一些问题.我使用Spring Cloud Security,OAuth2等保护了我的应用程序(网关和注册服务).

我授予每个人(permitAll)访问/ signup的权限,这是网关路由到实际注册服务的地方.我还授予了注册服务器本身的所有人访问权限.这按预期工作.

令我头疼的是CSRF保护.网关和注册服务都自己创建CSRF令牌.来自网关的令牌将被发送到客户端,并且来自注册服务的令牌丢失(在网关的某处).

如果我向注册服务发布了一些内容,CSRF保护就会启动并表示令牌为空,或者实际值与预期值不匹配,如果我尝试重用HTTP中可用的网关值头.

我已经让它在注册服务上禁用CSRF,但它似乎不是正确的解决方案,因为它只适用于有人从客户端发回令牌,如Angular SPA.当我尝试从浏览器提交表单(在注册服务上呈现)时,由于缺少_csrf参数而失败.如果我在注册服务上激活CSRF并将_csrf参数添加到表单中,网关的CSRF保护就会启动并说实际令牌与预期令牌不匹配,这是绝对正确的,因为实际令牌是一个来自注册服务,而预期的令牌来自网关.

我可以在网关上禁用CSRF,但这将导致我必须在REST客户端或SPA使用的每个服务上配置CSRF内容.

我在HttpSecurity.csrf()配置中尝试了ignoreAntMatchers(),我可以在其中排除特定路径,但这对我也没有帮助.期望值是完全不同的.似乎为POST请求创建了一个新会话.

那么有没有机会我可以在网关上使用CSRF,并立即使用表单提交和Zuul注册服务?

csrf spring-security spring-boot spring-cloud spring-cloud-security

8
推荐指数
1
解决办法
1363
查看次数