Chrome 80+ 跨域Samesite 導致的cookie not found 解決方法


應用系統使用的Http, 沒有使用Https(https不存在SameSite問題), 應用系統 通過IdentityServer4的認證中心返回后報錯誤:  Correlation failed ,如下圖

dbf4f2e3feee5d1e24c144712289a6e

Chrome 51 開始,瀏覽器的 Cookie 新增加了一個 SameSite屬性,用來防止 CSRF 攻擊和用戶追蹤。Chrome的更新導致SamSite策略有所變更,這個導致IS4的認證有問題,無法使用http客戶端連入IS4的服務端,abp的社區里提供了文章告訴我們解決方案 : How to fix the Chrome login issue for the IdentityServer4
 

Cookie 的SameSite屬性用來限制第三方 Cookie,從而減少安全風險。

它可以設置三個值。

  • Strict
  • Lax
  • None
1.1 Strict

Strict最為嚴格,完全禁止第三方 Cookie,跨站點時,任何情況下都不會發送 Cookie。換言之,只有當前網頁的 URL 與請求目標一致,才會帶上 Cookie。


Set-Cookie: CookieName=CookieValue; SameSite=Strict;

這個規則過於嚴格,可能造成非常不好的用戶體驗。比如,當前網頁有一個 GitHub 鏈接,用戶點擊跳轉就不會帶有 GitHub 的 Cookie,跳轉過去總是未登陸狀態。

1.2 Lax

Lax規則稍稍放寬,大多數情況也是不發送第三方 Cookie,但是導航到目標網址的 Get 請求除外。


Set-Cookie: CookieName=CookieValue; SameSite=Lax;

導航到目標網址的 GET 請求,只包括三種情況:鏈接,預加載請求,GET 表單。詳見下表。

image

設置了StrictLax以后,基本就杜絕了 CSRF 攻擊。當然,前提是用戶瀏覽器支持 SameSite 屬性。

1.3 None

Chrome 計划將Lax變為默認設置。這時,網站可以選擇顯式關閉SameSite屬性,將其設為None。不過,前提是必須同時設置Secure屬性(Cookie 只能通過 HTTPS 協議發送),否則無效。

下面的設置無效。


Set-Cookie: widget_session=abc123; SameSite=None

下面的設置有效。


Set-Cookie: widget_session=abc123; SameSite=None; Secure


免責聲明!

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



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