前言
最近同事詢問有一個蠻奇怪的問題,他使用 IE,Edge 可以正常登入系統,但使用 Chrome(V.81)卻無法登入。
系統是使用 ASP.NET Forms-Based Authentication 的方式,走 Https 。
於是請他用 Fiddler 錄看看執行的過程來比較看看差在那裡。
研究
透過 Edge 與 Chrome 的比較
下圖為 IE 錄下來的內容,
下圖為 Chrome 錄下來的內容,
可以發現 Forms Authentication Cookie 會存在 IE, Edge 之中,卻不存在 Chrome 之中。
即使有 Set-Cookie 還是不存在。
想說會是因為名稱我們使用 .DBAUTH 的關係嗎? 將 . 拿掉,Chrome 還是不 Work 。
記得那個系統之前有將 cookieSameSite 設定為 None ,所以就查了一下關於 cookieSameSite 的說明,在 Work with SameSite cookies in ASP.NET 有一段,
Cookies that assert SameSite=None must also be marked as Secure.
再請同事看一下,Chrome 的 Console 是否有什麼訊息,結果真的有警告,
Mark cross-site cookies as Secure to allow setting them in cross-site contexts
跟 Work with SameSite cookies in ASP.NET 的說明一致,
當我們設定了 cookieSameSite 為 None 時,表示它是 cross-site cookie ,在 Chrome 中,必需設定它為 Secure 才可以。
所以就請同事將 forms 的設定將 requireSSL 設定為 true , Chrome 就可以了哦!
參考資料
A future release of Chrome will only deliver cookies with cross-site requests if they are set with SameSite=None
and Secure
Work with SameSite cookies in ASP.NET