????????隨著業(yè)務(wù)的發(fā)展,各公司一般都會(huì)有很多個(gè)子系統(tǒng)。我們拿百度舉例,有百度云盤(pán),百度文庫(kù),百度貼吧、百度地圖、百度外賣(mài)等等。
? ? ? ? 為了避免使用各個(gè)子系統(tǒng)時(shí)需要多次登錄,一般都會(huì)從公司層面做一個(gè)統(tǒng)一的用戶系統(tǒng),用來(lái)負(fù)責(zé)用戶的注冊(cè)和登錄(我們稱之為passport)。
? ? ? ? 一個(gè)簡(jiǎn)單的實(shí)現(xiàn)方式就是所有的子產(chǎn)品都從統(tǒng)一的passport處登錄,passport寫(xiě)下權(quán)限(比如cookie權(quán)限),各個(gè)子系統(tǒng)都認(rèn)這個(gè)權(quán)限。cookie權(quán)限可以寫(xiě)下uid/logintime/vc(驗(yàn)證字符串)等。vc做一個(gè)加密規(guī)則比如UID+key+時(shí)間等。然后把加密規(guī)則告訴子系統(tǒng),子系統(tǒng)驗(yàn)證cookie的有效性。這樣就實(shí)現(xiàn)了各系統(tǒng)的統(tǒng)一登錄。當(dāng)然如果覺(jué)得這種對(duì)稱加密有安全隱患(各系統(tǒng)可以按照規(guī)則自行偽造cookie)的話,可以在服務(wù)端采用rsa簽名的方式,然后告訴子系統(tǒng)驗(yàn)證簽名的publickey,這樣可以保證子系統(tǒng)不可偽造登錄cookie。rsa雖然性能損壞較大,但是根據(jù)本機(jī)測(cè)試一萬(wàn)次驗(yàn)證需要500ms,完全可以滿足大部分系統(tǒng)的性能要求。
? ??