はじめに
CSRFトークンを送信しても403が返ってくる事態に際して奮闘した2日間の記録である。
なお、コロナとも戦っていた模様。
内容
CSRFトークンを使用してリクエストを送信するコードを以下とした。
var csrfToken = document.getElementById("_csrf").value;
var token = csrfToken.replace("XSRF-TOKEN=", "")
var header = "X-CSRF-TOKEN"
var mail = document.getElementById("email").value
const XHR = new XMLHttpRequest();
XHR.open('POST', '/resetPassword?mail=' + mail)
XHR.setRequestHeader(header, token)
XHR.send()
Cookieに保存されているXSRF-TOKENから値を取り出し_csrfにセットするという物だが、403がでる。
原因を調べても全然ヒットしない。
その時に気づいた。
「CookieのXSRF-TOKENの値がずっと同じ...?」
「Remember-meと関係あるのかな...deleteCookiesで試してみよう」
と、さっそくlogout時にdeleteCookiesでXSRF-TOKENごと削除した。
すると、今度はCookieにXSRF-TOKENがない...
結局、SessionのAttributesからトークンを持ってくる事にした。
DefaultCsrfToken token = (DefaultCsrfToken) request.getSession().getAttribute("org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository.CSRF_TOKEN"
);