摘要:如果一旦加密算法泄露了,攻擊者可以在本地建立一個(gè)實(shí)現(xiàn)了登錄接口的假冒父應(yīng)用,通過(guò)綁定來(lái)把子應(yīng)用發(fā)起的請(qǐng)求指向本地的假冒父應(yīng)用,并作出回應(yīng)。
原文鏈接:BlueSun | 單點(diǎn)登錄的三種實(shí)現(xiàn)方式
單點(diǎn)登錄SSO(Single Sign On)說(shuō)得簡(jiǎn)單點(diǎn)就是在一個(gè)多系統(tǒng)共存的環(huán)境下,用戶在一處登錄后,就不用在其他系統(tǒng)中登錄,也就是用戶的一次登錄能得到其他所有系統(tǒng)的信任。單點(diǎn)登錄在大型網(wǎng)站里使用得非常頻繁,例如像阿里巴巴這樣的網(wǎng)站,在網(wǎng)站的背后是成百上千的子系統(tǒng),用戶一次操作或交易可能涉及到幾十個(gè)子系統(tǒng)的協(xié)作,如果每個(gè)子系統(tǒng)都需要用戶認(rèn)證,不僅用戶會(huì)瘋掉,各子系統(tǒng)也會(huì)為這種重復(fù)認(rèn)證授權(quán)的邏輯搞瘋掉。實(shí)現(xiàn)單點(diǎn)登錄說(shuō)到底就是要解決如何產(chǎn)生和存儲(chǔ)那個(gè)信任,再就是其他系統(tǒng)如何驗(yàn)證這個(gè)信任的有效性,因此要點(diǎn)也就以下兩個(gè):
存儲(chǔ)信任
驗(yàn)證信任
如果一個(gè)系統(tǒng)做到了開(kāi)頭所講的效果,也就算單點(diǎn)登錄,單點(diǎn)登錄有不同的實(shí)現(xiàn)方式,本文就羅列我開(kāi)發(fā)中所遇見(jiàn)過(guò)的實(shí)現(xiàn)方式。
以Cookie作為憑證媒介最簡(jiǎn)單的單點(diǎn)登錄實(shí)現(xiàn)方式,是使用cookie作為媒介,存放用戶憑證。
用戶登錄父應(yīng)用之后,應(yīng)用返回一個(gè)加密的cookie,當(dāng)用戶訪問(wèn)子應(yīng)用的時(shí)候,攜帶上這個(gè)cookie,授權(quán)應(yīng)用解密cookie并進(jìn)行校驗(yàn),校驗(yàn)通過(guò)則登錄當(dāng)前用戶。
不難發(fā)現(xiàn)以上方式把信任存儲(chǔ)在客戶端的Cookie中,這種方式很容易令人質(zhì)疑:
Cookie不安全
不能跨域?qū)崿F(xiàn)免登
對(duì)于第一個(gè)問(wèn)題,通過(guò)加密Cookie可以保證安全性,當(dāng)然這是在源代碼不泄露的前提下。如果Cookie的加密算法泄露,攻擊者通過(guò)偽造Cookie則可以偽造特定用戶身份,這是很危險(xiǎn)的。
對(duì)于第二個(gè)問(wèn)題,更是硬傷。
對(duì)于跨域問(wèn)題,可以使用JSONP實(shí)現(xiàn)。
用戶在父應(yīng)用中登錄后,跟Session匹配的Cookie會(huì)存到客戶端中,當(dāng)用戶需要登錄子應(yīng)用的時(shí)候,授權(quán)應(yīng)用訪問(wèn)父應(yīng)用提供的JSONP接口,并在請(qǐng)求中帶上父應(yīng)用域名下的Cookie,父應(yīng)用接收到請(qǐng)求,驗(yàn)證用戶的登錄狀態(tài),返回加密的信息,子應(yīng)用通過(guò)解析返回來(lái)的加密信息來(lái)驗(yàn)證用戶,如果通過(guò)驗(yàn)證則登錄用戶。
這種方式雖然能解決跨域問(wèn)題,但是安全性其實(shí)跟把信任存儲(chǔ)到Cookie是差不多的。如果一旦加密算法泄露了,攻擊者可以在本地建立一個(gè)實(shí)現(xiàn)了登錄接口的假冒父應(yīng)用,通過(guò)綁定Host來(lái)把子應(yīng)用發(fā)起的請(qǐng)求指向本地的假冒父應(yīng)用,并作出回應(yīng)。
因?yàn)楣粽咄耆梢园凑占用芩惴▉?lái)偽造響應(yīng)請(qǐng)求,子應(yīng)用接收到這個(gè)響應(yīng)之后一樣可以通過(guò)驗(yàn)證,并且登錄特定用戶。
最后一種介紹的方式,是通過(guò)父應(yīng)用和子應(yīng)用來(lái)回重定向中進(jìn)行通信,實(shí)現(xiàn)信息的安全傳遞。
父應(yīng)用提供一個(gè)GET方式的登錄接口,用戶通過(guò)子應(yīng)用重定向連接的方式訪問(wèn)這個(gè)接口,如果用戶還沒(méi)有登錄,則返回一個(gè)的登錄頁(yè)面,用戶輸入賬號(hào)密碼進(jìn)行登錄。如果用戶已經(jīng)登錄了,則生成加密的Token,并且重定向到子應(yīng)用提供的驗(yàn)證Token的接口,通過(guò)解密和校驗(yàn)之后,子應(yīng)用登錄當(dāng)前用戶。
這種方式較前面兩種方式,接解決了上面兩種方法暴露出來(lái)的安全性問(wèn)題和跨域的問(wèn)題,但是并沒(méi)有前面兩種方式方便。
安全與方便,本來(lái)就是一對(duì)矛盾。
一般說(shuō)來(lái),大型應(yīng)用會(huì)把授權(quán)的邏輯與用戶信息的相關(guān)邏輯獨(dú)立成一個(gè)應(yīng)用,稱為用戶中心。
用戶中心不處理業(yè)務(wù)邏輯,只是處理用戶信息的管理以及授權(quán)給第三方應(yīng)用。第三方應(yīng)用需要登錄的時(shí)候,則把用戶的登錄請(qǐng)求轉(zhuǎn)發(fā)給用戶中心進(jìn)行處理,用戶處理完畢返回憑證,第三方應(yīng)用驗(yàn)證憑證,通過(guò)后就登錄用戶。
如果本文對(duì)您有用
請(qǐng)不要吝嗇你們的Follow與Start
這會(huì)大大支持我們繼續(xù)創(chuàng)作
「Github」
MZMonster :@MZMonster
JC_Huang :@JerryC8080
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/11735.html
摘要:假如是在同一個(gè)域名下,例如與,因?yàn)樵试S設(shè)置到二級(jí)域名下,所以和是可以共享的,用戶的信息可以通過(guò)可逆加密放在二級(jí)域名下的,并且設(shè)置,就可以一站登錄,站站登錄。 原文鏈接:BlueSun | 登錄那些事兒 也不知道是什么原因,剛開(kāi)始不久的職業(yè)生涯,在技術(shù)這條路走著走著,和「登錄」總是有著一個(gè)不解之緣。還記得當(dāng)初學(xué)習(xí)Web編程的時(shí)候么?不管是Java、.Net、PHP,繼經(jīng)典「Hello W...
摘要:原文鏈接消息系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)上篇由于文章篇幅較長(zhǎng),而作者精力有限,不希望這么早就精盡人亡,故分成上下篇來(lái)寫(xiě)消息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。更新于關(guān)聯(lián)文章消息系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)下篇如果本文對(duì)您有用請(qǐng)不要吝嗇你們的與這會(huì)大大支持我們繼續(xù)創(chuàng)作 原文鏈接:Bluesun | 消息系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)「上篇」 由于文章篇幅較長(zhǎng),而作者精力有限,不希望這么早就精盡人亡,故分成上下篇來(lái)寫(xiě)消息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。上篇主要講...
摘要:全稱單點(diǎn)登錄用于實(shí)現(xiàn)多系統(tǒng)的登錄認(rèn)證說(shuō)白了就是只要一個(gè)賬號(hào)就可以訪問(wèn)阿里旗下支付寶淘寶天貓等網(wǎng)站站在企業(yè)的角度這樣做有一個(gè)好處只要有一個(gè)系統(tǒng)負(fù)責(zé)登錄模塊其他的子系統(tǒng)就可以專注于自己系統(tǒng)的業(yè)務(wù)邏輯需要的時(shí)候請(qǐng)求認(rèn)證系統(tǒng)就可以站在用戶的角度好處 SSO全稱Single Sign On,單點(diǎn)登錄.用于實(shí)現(xiàn)多系統(tǒng)的登錄認(rèn)證.說(shuō)白了就是只要一個(gè)賬號(hào)就可以訪問(wèn)阿里旗下支付寶,淘寶, 天貓等網(wǎng)站.站...
摘要:本米撲博客先介紹幾個(gè)最簡(jiǎn)單的發(fā)送郵件方式記錄下,像郵件,附件等也是支持的,需要時(shí)查文檔即可。特別注意命令發(fā)送郵件,默認(rèn)用端口號(hào),由于阿里云騰訊云等封禁了端口號(hào),因此本示例需在開(kāi)通端口機(jī)器上測(cè)試執(zhí)行命令收件結(jié)果 Python發(fā)送email的三種方式,分別為使用登錄郵件服務(wù)器、使用smtp服務(wù)、調(diào)用sendmail命令來(lái)發(fā)送三種方法 本文原文自米撲博客:Python 發(fā)送 email 的三...
閱讀 2501·2021-11-17 09:33
閱讀 796·2021-11-04 16:13
閱讀 1358·2021-10-14 09:50
閱讀 718·2019-08-30 15:53
閱讀 3693·2019-08-30 14:18
閱讀 3287·2019-08-30 14:14
閱讀 2127·2019-08-30 12:46
閱讀 3208·2019-08-26 14:05