問題描述:昨天升級系統(tǒng)后,打開谷歌,登錄本地項(xiàng)目調(diào)試(采用代理的方式訪問后端測試接口)恩袱,發(fā)現(xiàn)一直登錄不上去,報(bào)登錄失效沒有權(quán)限胶哲,記錄了一下問題的查找和解決思路畔塔。
1. 登錄立即返回?zé)o權(quán)限,我第一猜測鸯屿,應(yīng)該是登錄接口有問題澈吨,于是我打開 network
2. 我發(fā)現(xiàn)登錄接口報(bào)200,其余接口報(bào)303[不要糾結(jié)無權(quán)限為什么是 303 而不是 401寄摆,QAQ~]谅辣,于是點(diǎn)擊查看詳細(xì)
3. 我發(fā)現(xiàn)登錄時(shí) OK 的呢,那問題出在哪里冰肴,我查看無權(quán)限的請求屈藐,發(fā)現(xiàn)請求并未攜帶 cookie 或 token
4. 查看 application榔组,cookie 為空
5. 倒回去查看登錄接口的響應(yīng)頭熙尉,驗(yàn)證是否返回了 cookie
6. 明明返回了 cookie卻不發(fā)送联逻,那怎么回事呢,找了好久检痰,突然發(fā)現(xiàn)旁邊一個(gè)警告??包归,浮動(dòng)提示截不了圖,原文如下:
this set-cookie didn`t specify a "SameSite" attribute and was default to "SameSite=Lax" and broke the same rules specified in the SameSiteLax value铅歼。
大致意思就是:set-cookie 沒有 SameSite 屬性公壤, 因而設(shè)置為默認(rèn)值 “Lax”,并且違反了值為 SameSiteLax 的規(guī)則椎椰。
7. 我把這句話放在 Google 和 Stack Overflow 上厦幅,沒有搜索到任何結(jié)果,于是我查找其中的關(guān)鍵詞慨飘,SameSite确憨,得到如下兩篇文章提示
https://blog.heroku.com/chrome-changes-samesite-cookie
https://www.chromestatus.com/feature/5088147346030592
8. 上面兩篇文章中提到,SameSite 是谷歌(也包括 使用 webkit 的 Safari)推出的一個(gè) CSRF 安全策略瓤的, 在后端沒有返回 SameSite 的情況下休弃,默認(rèn)設(shè)置為 Lax,而 Lax 的等級為中圈膏,意味著跨站訪問是不能設(shè)置和攜帶 cookie 的塔猾,至此,問題的核心找到了
9. 那問題怎么解決呢稽坤?目前肯定不能因?yàn)殚_發(fā)環(huán)境而讓后端改接口丈甸,但我還是一想就想到了,既然是安全策略尿褪,瀏覽器行為睦擂,那一定是可配置的吧,于是我在谷歌設(shè)置中搜索
10. 設(shè)置為 disabled茫多,然后重啟就好了哈哈哈
至此祈匙,完美解決~ ??