我在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注册服务?