您好,登錄后才能下訂單哦!
服務A:http://192.168.126.129:5001
服務B:http://192.168.126.129:5002或者任意一個請求A時是跨域的地址
現在服務A有了它自己的cookie,我們在服務B通過ajax訪問服務A或者與A同域的任何一個服務(如http://192.168.126.129:8002,http://192.168.126.129:8003....等)時,是一種跨域訪問方式,默認情況下A的cookie是不會隨帶發的,要想這些服務端(A或者與A同域的服務端)接收到這些cookie,僅僅需要發送時設置ajax:
withCredentials=true
這樣服務端就能收到這些cookie了,事情告一段落了。
注意:假設服務A有個簽發cookie的服務,服務B ajax跨域調用A的這個服務來設置A的cookie,此時要想Set-Cookie生效,B調用時也要帶上withCredentials=true,否則不能保存cookie
但是這個時候服務端A對這個跨域的ajax請求的響應,瀏覽器默認是不會接受的,因為跨域了,
此時A服務端需要做如下設置:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin:(B的協議:域名+端口,.net core的CORS中間件也可以寫個*號)
缺一不可,注意這僅僅是為了瀏覽器能接收這個請求的響應,不設置,不會阻止請求和cookie的發送!!!
注意:
上面說的只對ajax請求有效。如果B系統有個鏈接指向A系統,那么點擊這個鏈接,cookie默認還是會發過去的,這就是很多csrf威脅的根源。要想避免這種情況,可設置A的cookie的SameSite屬性:
none:不做任何阻止,這是默認值
Strict:阻止任何從A系統外的地方訪問A系統時帶A的cookie,有效阻止CSRF威脅
Lax: 只會在使用危險HTTP方法或異步請求(比如script,img,link,iframe,表單發起的post請求)發送跨域cookie的時候進 行阻止,其他同步請求(打開新窗口,改變當前頁面的get請求)不會被阻止,一般的cookie可以設置為strict,會話cookie為了好的體驗,建議設為Lax,這個時候A系統的服務最好保證Get請求僅僅是讀取類的請求。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。