成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

實(shí)現(xiàn)一個(gè)SSO系統(tǒng)

luodongseu / 1628人閱讀

摘要:全稱單點(diǎn)登錄用于實(shí)現(xiàn)多系統(tǒng)的登錄認(rèn)證說白了就是只要一個(gè)賬號就可以訪問阿里旗下支付寶淘寶天貓等網(wǎng)站站在企業(yè)的角度這樣做有一個(gè)好處只要有一個(gè)系統(tǒng)負(fù)責(zé)登錄模塊其他的子系統(tǒng)就可以專注于自己系統(tǒng)的業(yè)務(wù)邏輯需要的時(shí)候請求認(rèn)證系統(tǒng)就可以站在用戶的角度好處

SSO全稱Single Sign On,單點(diǎn)登錄.用于實(shí)現(xiàn)多系統(tǒng)的登錄認(rèn)證.說白了就是只要一個(gè)賬號就可以訪問阿里旗下支付寶,淘寶, 天貓等網(wǎng)站.站在企業(yè)的角度這樣做有一個(gè)好處:只要有一個(gè)系統(tǒng)負(fù)責(zé)登錄模塊,其他的子系統(tǒng)就可以專注于自己系統(tǒng)的業(yè)務(wù)邏輯,需要的時(shí)候請求認(rèn)證系統(tǒng)就可以.站在用戶的角度好處在于只要一個(gè)賬號就可以訪問其公司旗下所有產(chǎn)品.

SSO有多種實(shí)現(xiàn)方案,這次我們來分析一下其中的一種可行方案.并且擼起袖子代碼實(shí)現(xiàn)一遍.其實(shí)現(xiàn)效果如下

一個(gè)賬號可以同時(shí)訪問www.a.com跟www.b.com

賬號在一個(gè)系統(tǒng)中退出,其他系統(tǒng)也同樣退出.

如果需要,改動一點(diǎn)代碼可以實(shí)現(xiàn)賬號在www.a.com登錄之后訪問www.b.com不用進(jìn)行賬戶密碼登錄認(rèn)證.

原理

在實(shí)現(xiàn)之前,我們來分析一下整個(gè)流程.

通常情況下,系統(tǒng)判斷用戶是否登錄都是校驗(yàn)session.在SSO架構(gòu)中,判斷用戶是否登錄仍然依靠session,但是session由SSO server維護(hù), session_id由client保持,client直接訪問的卻是業(yè)務(wù)系統(tǒng).

在這樣的情況下,要想能夠使用session進(jìn)行登錄驗(yàn)證. 假設(shè)client訪問業(yè)務(wù)系統(tǒng),業(yè)務(wù)系統(tǒng)取得其session_id,然后把session_id提交到SSO Server進(jìn)行驗(yàn)證.我們看到這里的業(yè)務(wù)系統(tǒng)充當(dāng)了一個(gè)proxy的角色,下文以proxy指代各個(gè)業(yè)務(wù)系統(tǒng).

這種方式簡單粗暴,但是有一個(gè)很大的局限性 : client持有的session_id由SSO Server發(fā)布的,proxy跟SSO Server必須持有相同域名,不然proxy無法獲取到client的session_id.所以需要在這種思路上做一點(diǎn)改變.

client訪問proxy,proxy隨機(jī)生成一個(gè)token作為cookie保存,并且SSO Server維護(hù)有一個(gè)以token為文件名的文件,文件保存了client訪問SSO Server生成的session id.當(dāng)proxy需要驗(yàn)證client身份,只要獲取到token,到SSO Server訪問token文件,獲取到session id.那么久可以訪問到session數(shù)據(jù).從而判斷該client是否已經(jīng)登錄.

總體設(shè)計(jì)思路如上,但是除了token,為了保證安全性,以及多個(gè)proxy之間不會產(chǎn)生沖突.一個(gè)完整的流程應(yīng)該如下 :

client ---> proxyA.proxyA為client生成一個(gè)隨機(jī)的token當(dāng)做cookie.然后引導(dǎo)client重定向到SSO Server.其中引導(dǎo)client重定向到SSO Server應(yīng)該包含如下信息

token,由proxy生成的隨機(jī)值

command 即訪問SSO Server的目的,一般為SSO Server系統(tǒng)中的一個(gè)函數(shù)名.

returnUrl : 一般為client訪問proxyA的url,即SSO Server 會重新引導(dǎo)client返回當(dāng)前頁面

當(dāng)前proxy的ID.proxy跟SSO Server之間約定好的一個(gè)唯一ID,并且每個(gè)唯一ID必須對應(yīng)一個(gè)secret key.這個(gè)key只有當(dāng)前proxy跟SSO Server知道.

checksum : 一個(gè)包含上述信息和secret key的單項(xiàng)加密,用于SSO Server驗(yàn)證參數(shù)是否被惡意修改.

上述的重定向url應(yīng)該類似www.sso.com?token=xxx&command=xxx&returnurl=xxx&proxy=proxyA&checksum=xxx.client被proxyA重定向到SSO Server之后,SSO校驗(yàn)參數(shù)的合法性后為client生成一個(gè)session_id.并且創(chuàng)建一個(gè)以proxyID-token-checksum的命名的文件,保存當(dāng)前client的session id.完成上述操作之后引導(dǎo)client重定向到returnUrl.這樣用戶的體驗(yàn)不會受到影響.

client重定向到proxyA后可以進(jìn)行登錄操作,proxyA可以從cookie中獲取到token.client提交用戶名跟密碼,proxyA重新生成一個(gè)proxyID-token-checksum的字符串,然后和用戶名密碼一起提交到SSO Server.

SSO Server收到proxyA的請求之后校驗(yàn)請求的合法性,然后獲取到proxyID-token-checksum文件中的session_id.在驗(yàn)證用戶密碼之后把登錄信息以proxyID--->username的形式寫到session中.之后返回用戶信息給proxyA.

proxyA受到SSO Server的用戶信息之后,判斷登錄成功.

當(dāng)用戶在多個(gè)proxy上登錄,就會在sesion中維護(hù)多個(gè)proxyID--->username的鍵值對信息.用戶從一個(gè)系統(tǒng)退出,proxy代理client向SSO Server發(fā)起退出請求.SSO Server按照上面的步驟獲取到session id.刪除掉所有的session數(shù)據(jù).這樣其他proxy的登錄信息也被刪除.下次訪問需重新登錄.

實(shí)現(xiàn)

上面的流程都清楚了,下面來嘗試用代碼實(shí)現(xiàn)

首先必然得有兩個(gè)模塊,proxy跟SSO Server.為了能在機(jī)子上運(yùn)行處效果,需要配置虛擬主機(jī),如果想提前看到效果, 可以在這里的SSO目錄下找到全部源碼,在apache下配置好www.a.com, www.b.com以及www.sso.com三個(gè)網(wǎng)站,并且在/etc/hosts下配置www.sso.com的ip地址.然后把SSO目錄下的三個(gè)子文件夾分別放到對應(yīng)目錄下.

整個(gè)系統(tǒng)中,proxy在三種情況下會請求SSO

attach.主要是為了通過client攜帶token給SSO.并且SSO 分配session_id 給client

login ,登錄.proxy代理 client向SSO發(fā)起身份驗(yàn)證的請求.

logout, 退出登錄,清除SSO維護(hù)的session數(shù)據(jù).

好了,整個(gè)SSO的分析就到這里了,源碼在github可以找到, 而且, 如果懂得上面的認(rèn)證流程,看懂代碼是很簡單的事情.

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/22226.html

相關(guān)文章

  • 系統(tǒng)的講解 - SSO單點(diǎn)登錄

    摘要:概念英文全稱,單點(diǎn)登錄。登錄如上述流程圖一致。系統(tǒng)和系統(tǒng)使用認(rèn)證登錄。退出上圖,表示的是從某一個(gè)系統(tǒng)退出的流程圖。與的關(guān)系如果企業(yè)有多個(gè)管理系統(tǒng),現(xiàn)由原來的每個(gè)系統(tǒng)都有一個(gè)登錄,調(diào)整為統(tǒng)一登錄認(rèn)證。 概念 SSO 英文全稱 Single Sign On,單點(diǎn)登錄。 在多個(gè)應(yīng)用系統(tǒng)中,只需要登錄一次,就可以訪問其他相互信任的應(yīng)用系統(tǒng)。 比如:淘寶網(wǎng)(www.taobao.com),天貓網(wǎng)...

    Kylin_Mountain 評論0 收藏0
  • 什么是單點(diǎn)登錄(SSO)

    摘要:此時(shí),用戶想要訪問系統(tǒng)受限的資源比如說訂單功能,訂單功能需要登錄后才能訪問,系統(tǒng)發(fā)現(xiàn)用戶并沒有登錄,于是重定向到認(rèn)證中心,并將自己的地址作為參數(shù)。前言 只有光頭才能變強(qiáng)。 文本已收錄至我的GitHub倉庫,歡迎Star:github.com/ZhongFuChen… 在我實(shí)習(xí)之前我就已經(jīng)在看單點(diǎn)登錄的是什么了,但是實(shí)習(xí)的時(shí)候一直在忙其他的事,所以有幾個(gè)網(wǎng)站就一直躺在我的收藏夾里邊: ...

    番茄西紅柿 評論0 收藏0
  • 什么是單點(diǎn)登錄(SSO)

    摘要:此時(shí),用戶想要訪問系統(tǒng)受限的資源比如說訂單功能,訂單功能需要登錄后才能訪問,系統(tǒng)發(fā)現(xiàn)用戶并沒有登錄,于是重定向到認(rèn)證中心,并將自己的地址作為參數(shù)。前言 只有光頭才能變強(qiáng)。 文本已收錄至我的GitHub倉庫,歡迎Star:github.com/ZhongFuChen… 在我實(shí)習(xí)之前我就已經(jīng)在看單點(diǎn)登錄的是什么了,但是實(shí)習(xí)的時(shí)候一直在忙其他的事,所以有幾個(gè)網(wǎng)站就一直躺在我的收藏夾里邊: ...

    番茄西紅柿 評論0 收藏0
  • 什么是單點(diǎn)登錄(SSO)

    摘要:此時(shí),用戶想要訪問系統(tǒng)受限的資源比如說訂單功能,訂單功能需要登錄后才能訪問,系統(tǒng)發(fā)現(xiàn)用戶并沒有登錄,于是重定向到認(rèn)證中心,并將自己的地址作為參數(shù)。前言 只有光頭才能變強(qiáng)。 文本已收錄至我的GitHub倉庫,歡迎Star:github.com/ZhongFuChen… 在我實(shí)習(xí)之前我就已經(jīng)在看單點(diǎn)登錄的是什么了,但是實(shí)習(xí)的時(shí)候一直在忙其他的事,所以有幾個(gè)網(wǎng)站就一直躺在我的收藏夾里邊: ...

    2i18ns 評論0 收藏0
  • 什么是單點(diǎn)登錄(SSO)

    摘要:此時(shí),用戶想要訪問系統(tǒng)受限的資源比如說訂單功能,訂單功能需要登錄后才能訪問,系統(tǒng)發(fā)現(xiàn)用戶并沒有登錄,于是重定向到認(rèn)證中心,并將自己的地址作為參數(shù)。 前言 只有光頭才能變強(qiáng)。文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y 在我實(shí)習(xí)之前我就已經(jīng)在看單點(diǎn)登錄的是什么了,但是實(shí)習(xí)的時(shí)候一直在忙其他的事,所以有幾個(gè)網(wǎng)站就...

    levy9527 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<