ASP.NET Core SameSite 設置引發 Cookie 在 QQ 瀏覽器中不起做用

最近在發佈了基於 ASP.NET Core 實現的新版登陸頁面以後,陸陸續續地接到用戶反饋登陸時 Antiforgery Token 老是驗證失敗。html

日誌中記錄的對應錯誤是ajax

Antiforgery token validation failed. The required antiforgery cookie "xxx.Antiforgery" is not present.

今天在 QQ 瀏覽器中將內核模式設置爲「老是使用 IE 內核」重現了問題,經過瀏覽器的開發者工具查看 cookie 狀況,打開登陸頁時 antiforgery cookie 已發送給了瀏覽器,瀏覽器也正常接收到了 cookie ,但 ajax post 提交時,卻沒有帶上 antiforgey cookie ,非常奇怪,咱們並無對 antiforgery cookie 進行特殊設置。瀏覽器

services.AddAntiforgery(options =>
{
    options.Cookie.Name = ".xxx.Antiforgery";
});

後來在園子裏找到一篇博文 QQ 瀏覽器兼容模式下 Cookie 失效致使的 ASP.NET Core Cookie 認證失效 ,才知道是 Cookie.SameSite 惹的禍。cookie

查看 antiforgery cookie 的 samesite 值是 strict,原來 asp.net core 默認用的是 SameSiteMode.Strict ,改成 SameSiteMode.None 問題就解決了。asp.net

services.AddAntiforgery(options =>
{
    options.Cookie.Name = ".XXX.Antiforgery";
    options.Cookie.SameSite = SameSiteMode.None;
});
相關文章
相關標籤/搜索