最近輪到我在小組晨會(huì)來(lái)分享知識(shí)點(diǎn),突然想到單點(diǎn)登錄,準(zhǔn)備來(lái)分享下如何實(shí)現(xiàn)單點(diǎn)登錄,所以有了下文。實(shí)現(xiàn)方案以及代碼可能寫(xiě)得不是很?chē)?yán)謹(jǐn),有漏洞的地方或者錯(cuò)誤的地方歡迎大家指正。

剛開(kāi)始頭腦中沒(méi)有思路,直接在博客園里面看看別人是如何來(lái)實(shí)現(xiàn)的,看了幾篇文章發(fā)現(xiàn),發(fā)現(xiàn)解決方案有點(diǎn)問(wèn)題,或者說(shuō)不算實(shí)現(xiàn)了單點(diǎn)登錄。最近輪到我在小組晨會(huì)來(lái)分享知識(shí)點(diǎn),突然想到單點(diǎn)登錄,準(zhǔn)備來(lái)分享下如何實(shí)現(xiàn)單點(diǎn)登錄,所以有了下文。實(shí)現(xiàn)方案以及代碼可能寫(xiě)得不是很?chē)?yán)謹(jǐn),有漏洞的地方或者錯(cuò)誤的地方歡迎大家指正。

名稱定義

為了方便說(shuō)明先說(shuō)明幾個(gè)文中出現(xiàn)的名詞的含義:

P站:統(tǒng)一登錄授權(quán)驗(yàn)證中心,demo中 域名是www.passport.com:801

A站:處于不同域名下的測(cè)試網(wǎng)站,demo中 域名是www.a.com:802

B站:處于不同域名下的測(cè)試網(wǎng)站,demo中 域名是www.b.com:803

Token:用戶訪問(wèn)P站的秘鑰
Ticket:用來(lái)保存用戶信息的加密字符串

單點(diǎn)登錄

訪問(wèn)A站需要登陸的就跳轉(zhuǎn)P站中進(jìn)行登陸,P站登陸之后跳轉(zhuǎn)回至A站,用戶再次訪問(wèn)B站需要登陸的頁(yè)面,用戶不需要進(jìn)行登陸操作就可以正常訪問(wèn)。

實(shí)現(xiàn)思路

未登錄用戶訪問(wèn)A站,首先會(huì)重定向跳轉(zhuǎn)至P站授權(quán)中心,P站首先通過(guò)檢測(cè)Cookie來(lái)判斷當(dāng)前不是處于登陸狀態(tài),就跳轉(zhuǎn)至登陸頁(yè)面進(jìn)行登陸操作,登陸成功之后把用戶信息加密ticket附在A的請(qǐng)求地址上返回,A站通過(guò)解密ticket來(lái)獲取用戶信息,解密成功并存進(jìn)Session中(這樣用戶在A中就處于登陸狀態(tài)了),訪問(wèn)通過(guò);當(dāng)用戶再次訪問(wèn)B站的時(shí)候,對(duì)于B站來(lái)說(shuō),用戶是處于未登錄狀態(tài),則同樣會(huì)重定向跳轉(zhuǎn)至P站授權(quán)中心,P站檢測(cè)Cookie,判斷當(dāng)前用戶處于登陸狀態(tài),就把當(dāng)前用戶信息加密成ticket附在B的請(qǐng)求地址上返回,后面的操作就和A站處理一樣;這樣都登陸之后再次訪問(wèn)A或者B,A和B中Session中都存儲(chǔ)了用戶信息,就不會(huì)再次請(qǐng)求P站了。

簡(jiǎn)單關(guān)系圖

泳道流程圖

網(wǎng)友評(píng)論