我正在使用spring并通过HttpSessionCsrfTokenRepository启用了csrf,我清楚地知道客户端是否以_csrf参数或X-CSRF-TOKEN标头的形式发送csrf令牌,spring会选择该令牌并使用该令牌进行验证使用generateToken(HttpServletRequest request)
生成
但是我的问题是spring如何在内部做到这一点。
我对此问题的理由是:
1。我有一个Rest POST呼叫,该呼叫需要凭证并验证 用户的身份。但是由于我想将csrf令牌添加到 休息电话作为安全层,我想在帖子正文中添加它 以防止csrf令牌泄漏。
因此,如果我知道Spring Security如何在内部过滤这些令牌,将很有帮助。我修订了Spring文档,但这主要是我们如何在具有隐藏字段或元标记以及带有标头的Ajax调用的形式中使用CSRF令牌。
如果将令牌放在主体中也是一件好事,我也想听听我的设计意见(我坚信,因为这不是泄漏令牌的简单url参数),还是我应该将其放入标头。我只是不想仅仅因为它简单而倾向于使用头文件。寻找最佳解决方案。
请阐明一下。
答案 0 :(得分:1)
如果您想研究一下CsrfTokenRepository在春季有多种实现方式。例如:
IMO出于很好的理由(更安全-可能是?)将令牌保留在标头上,因为我想到的原因很少。
您不能在主体上为GET请求设置令牌。您希望与所有端点保持一致(今天可能不需要,但是情况变化很快)
明天,如果您想更改Auth模型,则不想更改请求正文。当请求正文更改时,您会与客户违约
如果将身份验证模型更改为授权服务器,则可以在服务之前添加代理服务器(例如ngnix?),并命名为auth-proxy。您可以将所有与安全相关的内容留给此auth-proxy,它将检查标头并为您进行验证。您不希望代理调查您的请求正文,而是可以专注于业务实现
根据我的经验,这只是我的看法。