「ASP.NET CoreでJavaScriptのfetch関数を使う」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
 
11行目: 11行目:
 
cshtmlの上部(@pageや@modelなどの直下あたり)に以下を追加する。
 
cshtmlの上部(@pageや@modelなどの直下あたり)に以下を追加する。
 
サーバーサイドでCSRFトークンを生成する。
 
サーバーサイドでCSRFトークンを生成する。
<source lang="">
+
<source lang="text">
 
@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Antiforgery
 
@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Antiforgery
 
@{
 
@{

2024年3月7日 (木) 01:39時点における最新版

ASP.NET Coreで何も考えずにJavaScriptのfetch関数を使うとCSRF対策機能が働いて400エラー(Bad Request)になります。

対策[編集 | ソースを編集]

service[編集 | ソースを編集]

サービスの設定は.NET 8系のテンプレートだとProgram.csにある。

builder.Services.AddAntiforgery(x => x.HeaderName = "X-CSRF-TOKEN");

cshtml[編集 | ソースを編集]

cshtmlの上部(@pageや@modelなどの直下あたり)に以下を追加する。 サーバーサイドでCSRFトークンを生成する。

@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Antiforgery
@{
    var requestToken = Antiforgery.GetAndStoreTokens(this.HttpContext).RequestToken;
}

javascript[編集 | ソースを編集]

fetch関数のheadersにCSRFトークンを展開する。

var data = { "head":"hage" }
fetch('/human', {
    method: 'POST',
    headers: {
        "X-CSRF-TOKEN": "@requestToken",
        "Content-Type": "application/json",
        "Accept": "application/json"
    },
    body: JSON.stringify(data)
});

おわり

関連項目[編集 | ソースを編集]