[英]ASP.NET Core 3.1 URL link to page that requires authorisation giving error Antiforgery token validation failed
[英]Enabling antiForgery on .Net Core 3.1 results in BadRequest
我正在嘗試實現 .net Core 3.1 框架中提供的防偽機制,但是在嘗試發送需要驗證的請求時,我總是收到 400 Bad Request。 該應用程序是使用 Odata、實體框架、Oracle 的 web api。 它使用 JWT 進行身份驗證和授權。 它目前按預期工作,但我被要求將 JWT 保存在 cookie 中,因此我需要針對 XSRF 攻擊實施某種安全措施。
我知道這似乎是一個重復的問題,但我認為我已經遵循了我遇到的每個建議的答案,但無濟於事。
在 ConfigureServices 我有
services.AddCors(c =>
{
c.AddPolicy("AllowOrigin", options => options
//.AllowAnyOrigin()
.WithOrigins("https://localhost:5001")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
);
});
services.AddAntiforgery(options =>
{
// Set Cookie properties using CookieBuilder properties†.
options.HeaderName = "X-XSRF-TOKEN";
options.SuppressXFrameOptionsHeader = false;
//options.Cookie.Name = "XSRF-TOKEN";
});
services.AddMvc(o =>
{
o.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
});
我有一個允許用戶登錄的專用端點,它會生成軟件所需的 cookies,包括防偽 cookies(XSRF-TOKEN 和.AspNetCore.Antiforgery.IwdqSLfpWIs)
var aft = _antiForgery.GetAndStoreTokens(HttpContext);
Response.Cookies.Append("XSRF-TOKEN", aft.RequestToken, new CookieOptions
{
HttpOnly = false
//,IsEssential = true
,Secure = true
//TODO: Varias de entorno
,Domain = "localhost"
});
使用 postman 時,我可以登錄並獲得 cookies。 我可以成功發出 GET 請求,但每次嘗試執行需要 antiForgeryValidation 的 POST 請求時,我都會收到 400 Bad Request 響應。 如果我禁用特定 POST 端點的驗證,則該端點可以正常工作。
在每個請求中,我設置 header X-XSRF-TOKEN 並且我分配給它的值等於 XSRF-TOKEN 的值。 就像是
CfDJ8LjjmjsmmflNk1FyHauE92b4PAjyLk1a1uwJhdrkDydkihsu5yBE3K54ZmF2dl6716tjhpmHUzukg1aW1ubXQzCrZjO0xIgrw-282MH2CLrHcPavgtTJ2TnrYnALJz-mUKiMqkIQHYpicnO9jJaGZrA
postman 中的請求如下所示:
當做這樣的請求時,我可以在 context.Request 中看到令牌(所有 4 個 cookies,包括 X-XSRF-TOKEN 和值,這是我在 PostMan 中設置的)
我完全糊塗了,這個實現似乎特別容易,但我無法正確地做到這一點。 請幫忙。
我的錯誤是嘗試登錄並在單個請求中“一次性”設置防偽 cookie。 一旦我在一個請求中登錄並在另一個請求中設置 cookies,一切都按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.