[英]Spring boot - Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'
[英]How does the spring internally validate the csrf token with _csrf parameter or X-CSRF-TOKEN header?
我正在使用spring並通過HttpSessionCsrfTokenRepository啟用了csrf,我清楚地知道客戶端是否以_csrf參數或X-CSRF-TOKEN標頭的形式發送csrf令牌,春季請求了該令牌並使用通過generateToken(HttpServletRequest request)
的令牌進行了驗證generateToken(HttpServletRequest request)
但是我的問題是spring在內部如何做到這一點。 我對此問題的原因是:
1.我有一個Rest POST呼叫,該呼叫需要憑證並驗證用戶的身份。 但是由於我想將csrf令牌作為安全性層添加到rest調用中,因此我想將其添加到post正文中以防止csrf令牌泄漏。
因此,如果我知道Spring Security如何在內部過濾這些令牌,將很有幫助。 我修訂了Spring文檔,但這主要是我們如何在具有隱藏字段或元標記以及帶有標頭的Ajax調用的形式中使用CSRF令牌。
而且我也想聽聽對我的設計的任何評論,如果將標記放在主體中是一件好事(我堅信這不是泄漏標記的簡單url參數),還是應該在標頭中使用它。 我只是不想僅僅因為它簡單而傾向於使用頭文件。 尋找最佳解決方案。
請說明一下。
如果您想研究一下CsrfTokenRepository在春季有多種實現方式。 例如:
IMO將標記保留在標頭上的好處(更安全-可能是?),因為我能想到的原因很少。
您無法在主體上為GET請求設置令牌。 您希望與所有端點保持一致(您今天可能不需要,但是情況變化很快)
明天,如果您想更改Auth模型,則不想更改請求正文。 當請求主體更改時,您與客戶違約
如果您將身份驗證模型更改為授權服務器,則可以在服務之前添加代理服務器(例如ngnix?),並將其稱為auth-proxy。 您可以將所有與安全相關的內容留給此auth-proxy,它將檢查標頭並為您進行驗證。 您不希望代理調查您的請求正文,而是可以專注於業務實施
根據我的經驗,這只是我的意見。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.