欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP中SSO Cookie登錄分析和實(shí)現(xiàn)

 更新時(shí)間:2015年11月06日 16:44:53   投稿:mrr  
單點(diǎn)登錄SSO(Single Sign-On)是身份管理中的一部分。SSO的一種較為通俗的定義是:SSO是指訪問同一服務(wù)器不同應(yīng)用中的受保護(hù)資源的同一用戶,只需要登錄一次,即通過一個(gè)應(yīng)用中的安全驗(yàn)證后,再訪問其他應(yīng)用中的受保護(hù)資源時(shí),不再需要重新登錄驗(yàn)證

什么是SSO?

單點(diǎn)登錄SSO(Single Sign-On)是身份管理中的一部分。SSO的一種較為通俗的定義是:SSO是指訪問同一服務(wù)器不同應(yīng)用中的受保護(hù)資源的同一用戶,只需要登錄一次,即通過一個(gè)應(yīng)用中的安全驗(yàn)證后,再訪問其他應(yīng)用中的受保護(hù)資源時(shí),不再需要重新登錄驗(yàn)證

SSO的用途:

目前的企業(yè)應(yīng)用環(huán)境中,往往有很多的應(yīng)用系統(tǒng),淘寶、天貓、愛淘寶等等產(chǎn)品和如辦公自動(dòng)化(OA)系統(tǒng),財(cái)務(wù)管理系統(tǒng),檔案管理系統(tǒng),信息查詢系統(tǒng)等等。這些應(yīng)用系統(tǒng)服務(wù)于企業(yè)的信息化建設(shè),為企業(yè)帶來(lái)了很好的效益。但是,用戶在使用這些應(yīng)用系統(tǒng)時(shí),并不方便。用戶每次使用系統(tǒng),都必須輸入用戶名稱和用戶密碼,進(jìn)行身份驗(yàn)證;而且應(yīng)用系統(tǒng)不同,用戶賬號(hào)就不同,用戶必須同時(shí)牢記多套用戶名稱和用戶密碼。特別是對(duì)于應(yīng)用系統(tǒng)數(shù)目較多,用戶數(shù)目也很多的企業(yè),這個(gè)問題尤為突出。問題的原因并不是系統(tǒng)開發(fā)出現(xiàn)失誤,而是缺少整體規(guī)劃,缺乏統(tǒng)一的用戶登錄平臺(tái),使用SSO技術(shù)可以解決以上這些問題

SSO的好處:

方便用戶:從用戶實(shí)際使用角度考慮

用戶使用應(yīng)用系統(tǒng)時(shí),能夠一次登錄,多次使用。用戶不再需要每次輸入用戶名稱和用戶密碼,也不需要牢記多套用戶名稱和用戶密碼。單點(diǎn)登錄平臺(tái)能夠改善用戶使用應(yīng)用系統(tǒng)的體驗(yàn)。
方便管理員:從日常維護(hù)管理角度考慮

現(xiàn)在很多大的互聯(lián)網(wǎng)公司都會(huì)有很多的應(yīng)用,比如以下是淘寶網(wǎng)的截圖:

天貓 聚劃算 頭條等都是不同的應(yīng)用,有的甚至采用完全不同的域名,但是所有在淘寶注冊(cè)的用戶都是使用的一套用戶名和口令,如果在這些系統(tǒng)直接切換做不到登陸狀態(tài)的同 步,體驗(yàn)是非常差的。再舉個(gè)栗子,很多公司內(nèi)部系統(tǒng)也有很多個(gè),比如HR系統(tǒng),財(cái)務(wù)系統(tǒng),考勤系統(tǒng)等等,如果員工在一個(gè)系統(tǒng)登陸了,跳轉(zhuǎn)到另外一個(gè)系統(tǒng)還 需要登陸,就會(huì)讓人很不爽...

基于此,SSO(Single Sign On)應(yīng)運(yùn)而生。當(dāng)然,我們來(lái)現(xiàn)實(shí)這個(gè)需求的方法有很多種,使用Cookie是其中比較簡(jiǎn)單的方式,主要需要解決的問題是:Cookie是不能跨域傳遞的,如何將一個(gè)域的Cookie通知給其它應(yīng)用(不在同一個(gè)域)?

so,如果你對(duì)cookie機(jī)制不太熟悉,請(qǐng)先google,并大致了解為什么cookie會(huì)設(shè)計(jì)成不能跨域等相關(guān)問題。

      系統(tǒng)管理員只需要維護(hù)一套統(tǒng)一的用戶賬號(hào),方便、簡(jiǎn)單。相比之下,系統(tǒng)管理員以前需要管理很多套的用戶賬號(hào)。每一個(gè)應(yīng)用系統(tǒng)就有一套用戶賬號(hào),不僅給管理上帶來(lái)不方便,而且,也容易出現(xiàn)管理漏洞。

簡(jiǎn)化應(yīng)用系統(tǒng)開發(fā):從應(yīng)用擴(kuò)展角度考慮

      開發(fā)新的應(yīng)用系統(tǒng)時(shí),可以直接使用單點(diǎn)登錄平臺(tái)的用戶認(rèn)證服務(wù),簡(jiǎn)化開發(fā)流程。單點(diǎn)登錄平臺(tái)通過提供統(tǒng)一的認(rèn)證平臺(tái),實(shí)現(xiàn)單點(diǎn)登錄。因此,應(yīng)用系統(tǒng)并不需要開發(fā)用戶認(rèn)證程序。  
如何實(shí)現(xiàn)?

SSO有以下幾種方式實(shí)現(xiàn)

共享Cookie

當(dāng)我們的子系統(tǒng)都在一個(gè)父級(jí)域名下時(shí),我們可以將Cookie種在父域下,這樣瀏覽器同域名下的Cookie則可以共享,這樣可以通過Cookie加解密的算法獲取用戶SessionID,從而實(shí)現(xiàn)SSO。

但是,后面我們發(fā)現(xiàn)這種方式有幾種弊端:
a. 所有同域名的系統(tǒng)都能獲取SessionID,易被修改且不安全;
b. 跨域無(wú)法使用。

ticket驗(yàn)證,我們目前采取的是這種方式

這種實(shí)現(xiàn)的SSO有以下幾個(gè)步驟:

a. 用戶訪問某個(gè)子系統(tǒng),發(fā)現(xiàn)如果未登錄,則引導(dǎo)用戶跳轉(zhuǎn)到SSO登錄頁(yè)面;
b. 判斷SSO是否已經(jīng)登錄;
c. 如果已經(jīng)登錄,直接跳轉(zhuǎn)到回調(diào)地址,并返回認(rèn)證ticket;
d. 如果未登錄,用戶正確輸入用戶名/密碼,認(rèn)證通過跳轉(zhuǎn)到回調(diào)地址,并返回認(rèn)證ticket;
e. 子系統(tǒng)獲取ticket,調(diào)用SSO獲取用戶uid等信息,成功后讓用戶登錄。

前面已經(jīng)說(shuō)了,如何通過Cookie來(lái)實(shí)現(xiàn)SSO,主要是如何解決跨域問題。首先來(lái)談?wù)凷et-Cookie中的domain屬性。

Cookie domain

為了讓Http協(xié)議在一定程度上保持上下文,server在響應(yīng)的頭部可以加入Set-Cookie來(lái)寫入一些數(shù)據(jù)到客戶端,Set-Cookie中的

domain字段用來(lái)表示這個(gè)cookie所在的域。

栗子:

我們?cè)L問www.cookieexm.com,如果server在返回頭部中加入了Set-Cookie,如果不指定domain,那么默認(rèn)這個(gè)cookie的域就是www.cookieexm.com,也就是只有訪問www.cookieexm.com時(shí)客戶端才會(huì)把這個(gè)cookie返給服務(wù)端。
如果我們指定domain為.cookieexm.com,那么客戶端在訪問以下域名:www.cookieexm.com www1.cookieexm.com a.cookieexm.com ***.cookieexm.com 時(shí)都能夠把cookie返回。

所以,我們得出一條結(jié)論:客戶端對(duì)cookie的domain的匹配是從結(jié)尾進(jìn)行匹配的,有了這個(gè)基礎(chǔ),我們就可以實(shí)現(xiàn)我們的SSO登陸了。

cookie中需要注意的

設(shè)置為http-only

涉及登錄憑證(如票據(jù)或者用戶名)應(yīng)該加密

cookie不能存放隱私數(shù)據(jù)

具體方案

假設(shè)我們需要在如下子系統(tǒng) **.a1.a2 **.b1.b2 **.c1.c2間實(shí)現(xiàn)單點(diǎn)登錄,首先我們需要一個(gè)專門用于單點(diǎn)登陸的認(rèn)證系統(tǒng)(sso.s1.s2)。假設(shè)目前系統(tǒng)處于未登錄狀態(tài),訪問www.a1.a2為例:

分別看一下每個(gè)步驟作用:

請(qǐng)求www.a1.a2

www.a1.a2收到請(qǐng)求,檢查是否攜帶登錄的cookie,目前沒有登陸過,那么重定向到sso認(rèn)證中心
SSO提供登陸窗口,用戶輸入用戶名 口令。SSO系統(tǒng)驗(yàn)證用戶名和口令

這一步是關(guān)鍵,如果登錄成功,首先把SSO系統(tǒng)的Cookie放到客戶端;同時(shí),將用戶的認(rèn)證信息傳遞通過重定向傳遞給業(yè)務(wù)方,注意,這個(gè)傳遞明顯不能通過cookie來(lái)傳遞(不同域嘛),一般是通過加密的querystring。

業(yè)務(wù)方的驗(yàn)證系統(tǒng)收到sso認(rèn)證信息,再進(jìn)行認(rèn)證
業(yè)務(wù)方認(rèn)證通過之后,把認(rèn)證結(jié)果的cookie寫入到.a1.a2,至此,SSO認(rèn)證完成
重定向到業(yè)務(wù)系統(tǒng)www.a1.a2,由前面的結(jié)論可知,此時(shí)所有以.a1.a2結(jié)尾的業(yè)務(wù)系統(tǒng)都可以使用這個(gè)認(rèn)證之后的cookie

response

說(shuō)明:
業(yè)務(wù)認(rèn)證系統(tǒng)不一定存在,有些不是太敏感的系統(tǒng)可以直接從SSO Authorization重定向到業(yè)務(wù)系統(tǒng),并把SSO的認(rèn)證信息帶過去。

承接上文,此時(shí),如果用戶訪問www.b1.b2應(yīng)用,如下圖所示:

與訪問www.a1.a2不同的是我們?cè)谥囟ㄏ虻絊SO Authorization時(shí)已經(jīng)不需要再去輸入用戶名,因?yàn)閟so.s1.s2此時(shí)已經(jīng)存有cookie,直接用cookie驗(yàn)證。

以上,就是一個(gè)簡(jiǎn)單的基于Cookie的登陸系統(tǒng)。

其中幾個(gè)問題需要重點(diǎn)解決

如何高效存儲(chǔ)大量臨時(shí)性的信任數(shù)據(jù)
如何防止信息傳遞過程被篡改
如何讓SSO系統(tǒng)信任登錄系統(tǒng)和免登系統(tǒng)
對(duì)于第一個(gè)問題,一般可以采用類似與memcached的分布式緩存的方案,既能提供可擴(kuò)展數(shù)據(jù)量的機(jī)制,也能提供高效訪問

對(duì)于第二個(gè)問題,一般采取數(shù)字簽名的方法,要么通過數(shù)字證書簽名,要么通過像md5的方式,這就需要SSO系統(tǒng)返回免登URL的時(shí)候?qū)π栩?yàn)證的參數(shù)進(jìn)行 md5加密,并帶上token一起返回,最后需免登的系統(tǒng)進(jìn)行驗(yàn)證信任關(guān)系的時(shí)候,需把這個(gè)token傳給SSO系統(tǒng),SSO系統(tǒng)通過對(duì)token的驗(yàn)證 就可以辨別信息是否被改過

對(duì)于最后一個(gè)問題,可以通過白名單來(lái)處理,說(shuō)簡(jiǎn)單點(diǎn)只有在白名單上的系統(tǒng)才能請(qǐng)求生產(chǎn)信任關(guān)系,同理只有在白名單上的系統(tǒng)才能被免登錄。

相關(guān)文章

  • php之二維數(shù)組排序問題

    php之二維數(shù)組排序問題

    這篇文章主要介紹了php之二維數(shù)組排序問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 50個(gè)優(yōu)秀經(jīng)典PHP算法大集合 附源碼

    50個(gè)優(yōu)秀經(jīng)典PHP算法大集合 附源碼

    這篇文章主要介紹了50個(gè)優(yōu)秀經(jīng)典PHP算法大集合 附源碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 利用switch語(yǔ)句進(jìn)行多選一判斷的實(shí)例代碼

    利用switch語(yǔ)句進(jìn)行多選一判斷的實(shí)例代碼

    下面小編就為大家?guī)?lái)一篇利用switch語(yǔ)句進(jìn)行多選一判斷的實(shí)例代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2016-11-11
  • Yii2單元測(cè)試用法示例

    Yii2單元測(cè)試用法示例

    這篇文章主要介紹了Yii2單元測(cè)試用法,結(jié)合實(shí)例形式分析了Yii2單元測(cè)試的具體實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下
    2016-11-11
  • 使用tp框架和SQL語(yǔ)句查詢數(shù)據(jù)表中的某字段包含某值

    使用tp框架和SQL語(yǔ)句查詢數(shù)據(jù)表中的某字段包含某值

    今天小編就為大家分享一篇使用tp框架和SQL語(yǔ)句查詢數(shù)據(jù)表中的某字段包含某值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2019-10-10
  • PHP 修改SESSION的生存時(shí)間案例詳解

    PHP 修改SESSION的生存時(shí)間案例詳解

    這篇文章主要介紹了PHP 修改SESSION的生存時(shí)間案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Laravel 讀取 config 下的數(shù)據(jù)方法

    Laravel 讀取 config 下的數(shù)據(jù)方法

    今天小編就為大家分享一篇Laravel 讀取 config 下的數(shù)據(jù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2019-10-10
  • yii2.0整合阿里云oss的示例代碼

    yii2.0整合阿里云oss的示例代碼

    本篇文章主要介紹了yii2.0整合阿里云oss的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-09-09
  • 淺談php冒泡排序

    淺談php冒泡排序

    這篇文章主要介紹了淺談php冒泡排序,需要的朋友可以參考下
    2014-12-12
  • 使用XHProf查找PHP性能瓶頸的實(shí)例

    使用XHProf查找PHP性能瓶頸的實(shí)例

    下面小編就為大家分享一篇使用XHProf查找PHP性能瓶頸的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2017-12-12

最新評(píng)論