[英]Anti forgery issue with some Android devices
我有一個使用防偽的 .NET Core 3.1.3 Web 應用程序。 在台式機和某些平板電腦上的 chrome 上一切正常。 它在帶有 Firefox 的 Android 設備上運行良好。 但是,在 Chrome 上,某些帶有 8.1 的 Android 設備對於啟用了防偽功能的任何 ajax 調用都會返回 400 錯誤。
一些代碼:
<form id="appForm" method="post" role="form">
@Html.AntiForgeryToken();
[AllowAnonymous]
[IgnoreAntiforgeryToken] // adding this to disable anti forgery makes the ajax call work
//[DisableCors]
[HttpPost]
public async Task<JsonResult> AddProduct(int productId)
{
$.ajax({
url: "/Cart/AddProduct/",
data: {
__RequestVerificationToken: $("[name='__RequestVerificationToken']").val(),
productId: $(this).data("productcode")
},
dataType: "json",
type: "POST",
services.AddAntiforgery(o =>
{
o.FormFieldName = "__RequestVerificationToken";
o.HeaderName = "X-XSRF-TOKEN";
//o.SuppressXFrameOptionsHeader = true;
o.Cookie.SameSite = SameSiteMode.None;
o.Cookie.Expiration = TimeSpan.FromDays(7);
});
如果我通過將屬性[IgnoreAntiforgeryToken]添加到我的控制器來關閉防偽,那么 ajax 調用將在 Android 設備上運行。 否則返回 400 錯誤。
它適用於搭載 Android 9.* 的設備,但不適用於搭載 Android 8.1 的手機和平板電腦。
任何人都可以提出任何可能導致這種情況的建議嗎? 我沒有想法並且很快就禿頂了。
謝謝
注意:@Html.AntiForgeryToken() 的顯式使用不是必需的,因為 Core 將為任何具有 POST 方法的表單添加一個令牌。 但是我想嘗試明確添加它以查看它是否解決了問題。 唉,沒有。
結果證明這是cookie政策。 要修復,請在 startup.cs 中使用:
SameSiteMode.Unspecified;
未指定使用客戶端要求。 Chrome 一直在抱怨 Samesite = None。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.