需求場景
最近做通過微信注冊我們的平台,我們的平台是微信是微服務,微信掃碼在登錄A服務,
注冊在平台B服務,因此需要將掃碼后的微信user info 從A服務傳到B服務。
目前有三個環境:
-
本地開發環境,服務A和服務B在同一ip的不同端口,即
服務A: 192.168.2.165:5010
服務B: 192.168.2.165:3002
-
k8s環境,內網,服務A和服務B沒有共同的一級域名,是兩個不同的ip,即
服務A: 192.168.2.192
服務B: 192.168.2.291
-
test和線上環境,外網,服務A和服務B有共同的一級域名,即
服務A: b.a.com
服務B: c.a.com
知識點
cookie 參數 (node express 中的使用)
res.cookie('key', 'value', {
maxAge: 600000,
httpOnly: true,
path: '/',
domain: 'a.com',
secure:true //設置該選項,只有https網站才可以輸出該cookie
});
-
key
cookie的變量名,必選
-
value
cookie變量的值,必選
-
maxAge
cookie變量保存的時間,可選。
可以為負數,表示此cookie只是存儲在瀏覽器內存里,只要關閉瀏覽器,此cookie就會消失。maxAge默認值為-1。
可以為正數,表示此cookie從創建到過期所能存在的時間,以秒為單位,此cookie會存儲到客戶端電腦,以cookie文件形式保存,不論關閉瀏覽器或關閉電腦,直到時間到才會過期。
可以為0,表示從客戶端電腦或瀏覽器內存中刪除此cookie。
-
httpOnly
如果cookie中設置了HttpOnly屬性,那么通過js腳本將無法讀取到cookie信息,這樣能有效的防止XSS攻擊,
竊取cookie內容,這樣就增加了cookie的安全性。這時cookie只能在服務器端獲取,前端無法獲取。 -
path
cookie的有效范圍,是在參數domain基礎上的有效范圍。如果path設置為”/”,那就是在整個domain都有效,
如果path設置為”/test”,那么只在domain下的/test目錄及子目錄才有效。 -
domain
cookie有效的域名。可選,默認值為當前。domain只能設置為當前域或其父級域名。當domain不正確時,將設置cookie失敗。
當cookie設置為一級域名a.com時,其子域b.a.com,c.a.com均有效。
-
secure
值cookie是否僅通過安全的https,值為0或1,如果值為1,則cookie只能在https連接上有效,默認值為0,表示cookei在http和https連接上都有效。
cookie 跨域的解決
(1)有共同一級域名的跨域cookie
對於有共同一級域名,只需在設置cookie時將domain設置成共同的一級域名即可,path設置為根目錄/。
(2)不同ip的cookie
對於不同ip的cookie在做時沒有實現cookie的共享,曲線救國了一下。
在此之前因需求,服務A跳到服務B的注冊路由(/weChatRegister)不允許直接訪問,因此對/weChatRegister路由進行了token的加密
和解密(使用的第三方庫jsonwebtoken https://github.com/auth0/node-jsonwebtoken),因此可將所需的信息通過token從服務A帶到服務B。