簡體   English   中英

如何在登錄時獲取 csrf 令牌?

[英]How to get csrf token on login in?

使用 Spring 安全性,我的理解是您在 GET 上獲取 csrf 令牌,然后將其包含在 header 中,用於任何后續的 POST、PUT、DELETE 請求。 但是登錄是一個POST? 那么如何獲取 csrf 令牌以便將其包含在登錄請求的 header 中?

我不想為登錄路由禁用 csrf。

登錄時不需要 csrf。 您已經通過用戶名和密碼授權。 您可以在設置中忽略該路徑

如果您使用的是 springboot,則 csrf 令牌會由CsrfRequestDataValueProcessor自動添加到響應中。 Springboot 默認情況下不會為 GET 添加 csrf 令牌,但對於 POST,它將在修改 state 時添加。以 jsp 為例:

<c:url var="logoutUrl" value="/logout"/>
<form action="${logoutUrl}"
    method="post">
  <input type="submit"
    value="Log out" />
  <input type="hidden"
    name="${_csrf.parameterName}"
    value="${_csrf.token}"/>
</form>

加載表單時,springboot 將通過后處理器自動注入 csrf 令牌的值。 如果您想在 ajax 調用中使用 csrf 令牌,那么您必須通過檢查 DOM 來獲取 csrf 令牌並將其手動添加到您的 ajax 請求中:

$(function () {
  var token = $("meta[name='_csrf']").attr("content");
  var header = $("meta[name='_csrf_header']").attr("content");
  $(document).ajaxSend(function(e, xhr, options) {
    xhr.setRequestHeader(header, token);
  });
});

注意:這兩個示例均來自文檔本身。

官方文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM