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


最近在發布了基於 ASP.NET Core 實現的新版登錄頁面之后,陸陸續續地接到用戶反饋登錄時 Antiforgery Token 總是驗證失敗。

日志中記錄的對應錯誤是

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 惹的禍。

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

services.AddAntiforgery(options =>
{
    options.Cookie.Name = ".XXX.Antiforgery";
    options.Cookie.SameSite = SameSiteMode.None;
});


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM