今天在使用 Chrome 測試網站時遇到了一個問題,該網站是採用 ASP.NET Core 的 Cookie 授權認證的方式驗證使用者,但明明使用者已經輸入帳號密碼且 API 也顯示登入成功,照裡來說使用者應該要能通過網站的驗證且 Cookies 裡會有相關的加密字串值才對,但怎麼找就是沒有,後來改透過安全連線(https)來嘗試,竟然就成功了!?這時才想到好像之前有看到一則新聞有關於 Google 針對 Cookies Policy 的更新,馬上上網查了一下是不是跟這有關,果不其然,較詳細的內容及解決方式我就直接列在下面了。
根據官方 Chrome 這兩則 [Cookies default to SameSite=Lax](https://www.chromestatus.com/feature/5088147346030592) 和 [Reject insecure SameSite=None cookies](https://www.chromestatus.com/feature/5633521622188032) 公告,若你的 Set-Cookie 裡的 SameSite 值為 None 或是 Lax(若是Get為例外)或是根本沒有 SameSite 屬性時,你的 Set-Cookie 裡必須還要含有 Secure 值才會讓此次要求(Request)裡的 Cookies 成功送出,以下為兩張比較圖
走 http 時 Set-Cookie 裡並不會加上 Secure

走 https 時 Set-Cookie 裡會自動加上 Secure

但以我是網站開發者的角度來說,這樣的規範其實有些時候會造成開發上的困擾,基本上我們並不會把每個測試網站都特別去申請一個 SSL 憑證來掛,因此這邊提供了一個較簡易的 Workaround 處理方式,如下 1\. 在 Chrome 網址列輸入 `chrome://flags` 後確定 2\. 輸入 **Cookies** 或 **Cookies without SameSite must be secure** 並搜尋  3\. 將 ***Cookies without SameSite must be secure*** 設定改為 **Disabled**  ##***重要(2021.10.14 更新):*** Chrome 在 **91** 版以後已將此 flag 移除(**94** 版後也不再支援使用引數方式),所以該 Workaround 也不適用了,詳細資訊可參考[這裡](https://piunikaweb.com/2021/06/14/google-chrome-flags-for-samesite-cookies-taken-away-after-update-v91/)。
##參考資料 [\[Google Chrome Help\] How can I get around this cookies getting blocked during development](https://support.google.com/chrome/thread/34237768?hl=en)
但以我是網站開發者的角度來說,這樣的規範其實有些時候會造成開發上的困擾,基本上我們並不會把每個測試網站都特別去申請一個 SSL 憑證來掛,因此這邊提供了一個較簡易的 Workaround 處理方式,如下 1\. 在 Chrome 網址列輸入 `chrome://flags` 後確定 2\. 輸入 **Cookies** 或 **Cookies without SameSite must be secure** 並搜尋  3\. 將 ***Cookies without SameSite must be secure*** 設定改為 **Disabled**  ##***重要(2021.10.14 更新):*** Chrome 在 **91** 版以後已將此 flag 移除(**94** 版後也不再支援使用引數方式),所以該 Workaround 也不適用了,詳細資訊可參考[這裡](https://piunikaweb.com/2021/06/14/google-chrome-flags-for-samesite-cookies-taken-away-after-update-v91/)。
##參考資料 [\[Google Chrome Help\] How can I get around this cookies getting blocked during development](https://support.google.com/chrome/thread/34237768?hl=en)