亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP單點登錄SSO實現方法

2020-03-22 18:56:41
字體:
來源:轉載
供稿:網友

SSO即單點登錄,是一種控制多個相關但彼此獨立的系統的訪問權限, 擁有這一權限的用戶可以使用單一的ID和密碼訪問某個或多個系統從而避免使用不同的用戶名或密碼,或者通過某種配置無縫地登錄每個系統 。

對于大型系統來說使用單點登錄可以減少用戶很多的麻煩。就拿百度來說吧,百度下面有很多的子系統——百度經驗、百度知道、百度文庫等等,如果我們使用這些系統的時候,每一個系統都需要我們輸入用戶名和密碼登錄一次的話,我相信用戶體驗肯定會直線下降。

與 SSO 交互的2個元素:1. 用戶,2. 系統,它的特點是:一次登錄,全部訪問。SSO 是訪問控制的一種,控制用戶能否登錄,即驗證用戶身份,而且是所有其它系統的身份驗證都在它這里進行,從整個系統層面來看 SSO ,它的核心就是這3個元素了:1. 用戶,2. 系統,3. 驗證中心。

這里寫圖片描述

1、同一個域但不同的子域如何進行單點登錄

假如我們的站點是按照下面的域名進行部署的:
sub1.onmpw.com
sub2.onmpw.com

這兩個站點共享同一域 onmpw.com 。

默認情況下,瀏覽器會發送 cookie 所屬的域對應的主機。也就是說,來自于 sub1.onmpw.com 的 cookie 默認所屬的域是 .sub1.onmpw.com 。因此,sub2.onmpw.com 不會得到任何的屬于 sub1.onmpw.com 的 cookie 信息。因為它們是在不同的主機上面,并且二者的子域也是不同的。

1.1 設置二者的 cookie 信息在同一個域下
  • 登錄 sub1.onmpw.com 系統

  • 登錄成功以后,生成唯一標識符Token(知道token,就知道哪個用戶登錄了)。設置 cookie 信息,這里需要注意,將Token存到 cookie 中,但是在設置的時候必須將這 cookie 的所屬域設置為頂級域 .onmpw.com 。這里可以使用 setcookie 函數,該函數的第四個參數是用來設置 cookie 所述域的。

setcookie(‘token’, ’xxx’, '/', ’.onmpw.com’);
  • 訪問 sub2.onmpw.com 系統,瀏覽器會將 cookie 中的信息 token 附帶在請求中一塊兒發送到 sub2.onmpw.com 系統。這時該系統會先檢查 session 是否登錄,如果沒有登錄則驗證 cookie 中的 token 從而實現自動登錄。

  • sub2.onmpw.com 登錄成功以后再寫 session 信息。以后的驗證就用自己的 session 信息驗證就可以了。

1.2 退出登錄

這里存在一個問題就是 sub1 系統退出以后,除了可以清除自身的 session 信息和所屬域為 .onmpw.com 的 cookie 的信息。它并不能清除 sub2 系統的 session 信息。那 sub2 仍然是登錄狀態。也就是說,這種方式雖說可以實現單點登錄,但是不能實現同時退出。原因是,sub1 和 sub2 雖說通過 setcookie 函數的設置可以共享 cookie,但是二者的sessionId 是不同的,而且這個 sessionId 在瀏覽器中也是以 cookie 的形式存儲的,不過它所屬的域并不是 .onmpw.com 。

那如何解決這個問題呢?我們知道,對于這種情況,只要是兩個系統的 sessionId 相同就可以解決這個問題了。也就是說存放 sessionId 的 cookie 所屬的域也是 .onmpw.com 。在PHP中,sessionId 是在 session_start() 調用以后生成的。要想使sub1 和 sub2 有共同的 sessionId ,那必須在 session_start() 之前設置 sessionId 所屬域:

ini_set('session.cookie_path', '/');ini_set('session.cookie_domain', '.onmpw.com');ini_set('session.cookie_lifetime', '0');

1、經過上面的步驟就可以實現不同二級域名的單點登錄與退出。
2、不過還可以再簡化,如確保 sessionId 相同就可以實現不同二級域名的單點登錄與退出。
參考文章: https://www.onmpw.com/tm/xwzj/network_145.html

2、不同域之間如何實現單點登錄

假設我們需要在以下這些站之間實現單點登錄

www.onmpw1.com
www.onmpw2.com
www.onmpw3.com

上面的方案就行不通了。

目前 github 上有開源的 SSO 解決方案,實現原理與主流 SSO 差不多:
https://github.com/jasny/sso
wiki
demo

核心原理:
1、客戶端訪問不同的子系統,子系統對應的 SSO 用戶服務中心使用相同的 SessionId。
2、子系統 Broker 與 Server 間通過 attach 進行了授權鏈接綁定

同根域名不指定 domain 根域名,第一次授權需要每次都要跳轉到授權服務,但是指定了domain, 同根域名只要有一個授權成功,都可以共用那個 cookie 了,下次就不用再授權了,直接就可以請求用戶信息了。

第一次訪問A:
這里寫圖片描述

第二次訪問B:
這里寫圖片描述

2.1 登錄狀態判斷

用戶到認證中心登錄后,用戶和認證中心之間建立起了會話,我們把這個會話稱為全局會話。當用戶后續訪問系統應用時,我們不可能每次應用請求都到認證中心去判定是否登錄,這樣效率非常低下,這也是單Web應用不需要考慮的。

我們可以在系統應用和用戶瀏覽器之間建立起局部會話,局部會話保持了客戶端與該系統應用的登錄狀態,局部會話依附于全局會話存在,全局會話消失,局部會話必須消失。

用戶訪問應用時,首先判斷局部會話是否存在,如存在,即認為是登錄狀態,無需再到認證中心去判斷。如不存在,就重定向到認證中心判斷全局會話是否存在,如存在,通知該應用,該應用與客戶端就建立起它們之間局部會話,下次請求該應用,就不去認證中心驗證了。

2.2 退出

用戶在一個系統退出了,訪問其它子系統,也應該是退出狀態。要想做到這一點,應用除結束本地局部會話外,還應該通知認證中心該用戶退出。

認證中心接到退出通知,即可結束全局會話,用戶訪問其它應用時,都顯示已登出狀態。

需不需要立即通知所有已建立局部會話的子系統,將它們的局部會話銷毀,可根據實際項目來。

SSO( Single Sign On ),即單點登錄,是一種控制多個相關但彼此獨立的系統的訪問權限, 擁有這一權限的用戶可以使用單一的ID和密碼訪問某個或多個系統從而避免使用不同的用戶名或密碼,或者通過某種配置無縫地登錄每個系統 。

對于大型系統來說使用單點登錄可以減少用戶很多的麻煩。就拿百度來說吧,百度下面有很多的子系統——百度經驗、百度知道、百度文庫等等,如果我們使用這些系統的時候,每一個系統都需要我們輸入用戶名和密碼登錄一次的話,我相信用戶體驗肯定會直線下降。

與 SSO 交互的2個元素:1. 用戶,2. 系統,它的特點是:一次登錄,全部訪問。SSO 是訪問控制的一種,控制用戶能否登錄,即驗證用戶身份,而且是所有其它系統的身份驗證都在它這里進行,從整個系統層面來看 SSO ,它的核心就是這3個元素了:1. 用戶,2. 系統,3. 驗證中心。

這里寫圖片描述

1、同一個域但不同的子域如何進行單點登錄

假如我們的站點是按照下面的域名進行部署的:
sub1.onmpw.com
sub2.onmpw.com

這兩個站點共享同一域 onmpw.com 。

默認情況下,瀏覽器會發送 cookie 所屬的域對應的主機。也就是說,來自于 sub1.onmpw.com 的 cookie 默認所屬的域是 .sub1.onmpw.com 。因此,sub2.onmpw.com 不會得到任何的屬于 sub1.onmpw.com 的 cookie 信息。因為它們是在不同的主機上面,并且二者的子域也是不同的。

1.1 設置二者的 cookie 信息在同一個域下
  • 登錄 sub1.onmpw.com 系統

  • 登錄成功以后,生成唯一標識符Token(知道token,就知道哪個用戶登錄了)。設置 cookie 信息,這里需要注意,將Token存到 cookie 中,但是在設置的時候必須將這 cookie 的所屬域設置為頂級域 .onmpw.com 。這里可以使用 setcookie 函數,該函數的第四個參數是用來設置 cookie 所述域的。

setcookie(‘token’, ’xxx’, '/', ’.onmpw.com’);
  • 訪問 sub2.onmpw.com 系統,瀏覽器會將 cookie 中的信息 token 附帶在請求中一塊兒發送到 sub2.onmpw.com 系統。這時該系統會先檢查 session 是否登錄,如果沒有登錄則驗證 cookie 中的 token 從而實現自動登錄。

  • sub2.onmpw.com 登錄成功以后再寫 session 信息。以后的驗證就用自己的 session 信息驗證就可以了。

1.2 退出登錄

這里存在一個問題就是 sub1 系統退出以后,除了可以清除自身的 session 信息和所屬域為 .onmpw.com 的 cookie 的信息。它并不能清除 sub2 系統的 session 信息。那 sub2 仍然是登錄狀態。也就是說,這種方式雖說可以實現單點登錄,但是不能實現同時退出。原因是,sub1 和 sub2 雖說通過 setcookie 函數的設置可以共享 cookie,但是二者的sessionId 是不同的,而且這個 sessionId 在瀏覽器中也是以 cookie 的形式存儲的,不過它所屬的域并不是 .onmpw.com 。

那如何解決這個問題呢?我們知道,對于這種情況,只要是兩個系統的 sessionId 相同就可以解決這個問題了。也就是說存放 sessionId 的 cookie 所屬的域也是 .onmpw.com 。在PHP中,sessionId 是在 session_start() 調用以后生成的。要想使sub1 和 sub2 有共同的 sessionId ,那必須在 session_start() 之前設置 sessionId 所屬域:

ini_set('session.cookie_path', '/');ini_set('session.cookie_domain', '.onmpw.com');ini_set('session.cookie_lifetime', '0');

1、經過上面的步驟就可以實現不同二級域名的單點登錄與退出。
2、不過還可以再簡化,如確保 sessionId 相同就可以實現不同二級域名的單點登錄與退出。
參考文章: https://www.onmpw.com/tm/xwzj/network_145.html

2、不同域之間如何實現單點登錄

假設我們需要在以下這些站之間實現單點登錄

www.onmpw1.com
www.onmpw2.com
www.onmpw3.com

上面的方案就行不通了。

目前 github 上有開源的 SSO 解決方案,實現原理與主流 SSO 差不多:
https://github.com/jasny/sso
wiki
demo

核心原理:
1、客戶端訪問不同的子系統,子系統對應的 SSO 用戶服務中心使用相同的 SessionId。
2、子系統 Broker 與 Server 間通過 attach 進行了授權鏈接綁定

同根域名不指定 domain 根域名,第一次授權需要每次都要跳轉到授權服務,但是指定了domain, 同根域名只要有一個授權成功,都可以共用那個 cookie 了,下次就不用再授權了,直接就可以請求用戶信息了。

第一次訪問A:
這里寫圖片描述

第二次訪問B:
這里寫圖片描述

2.1 登錄狀態判斷

用戶到認證中心登錄后,用戶和認證中心之間建立起了會話,我們把這個會話稱為全局會話。當用戶后續訪問系統應用時,我們不可能每次應用請求都到認證中心去判定是否登錄,這樣效率非常低下,這也是單Web應用不需要考慮的。

我們可以在系統應用和用戶瀏覽器之間建立起局部會話,局部會話保持了客戶端與該系統應用的登錄狀態,局部會話依附于全局會話存在,全局會話消失,局部會話必須消失。

用戶訪問應用時,首先判斷局部會話是否存在,如存在,即認為是登錄狀態,無需再到認證中心去判斷。如不存在,就重定向到認證中心判斷全局會話是否存在,如存在,通知該應用,該應用與客戶端就建立起它們之間局部會話,下次請求該應用,就不去認證中心驗證了。

2.2 退出

用戶在一個系統退出了,訪問其它子系統,也應該是退出狀態。要想做到這一點,應用除結束本地局部會話外,還應該通知認證中心該用戶退出。

認證中心接到退出通知,即可結束全局會話,用戶訪問其它應用時,都顯示已登出狀態。

需不需要立即通知所有已建立局部會話的子系統,將它們的局部會話銷毀,可根據實際項目來。

相關推薦:

實例講解SSO單點登錄原理

單點登錄原理和簡單實現

php實現的SSO單點登錄系統接入功能示例分析

以上就是PHP單點登錄SSO實現方法的詳細內容,更多請關注 其它相關文章!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91亚洲精品久久久久久久久久久久| 国产99久久精品一区二区 夜夜躁日日躁| 久久99精品久久久久久琪琪| 日韩精品一区二区三区第95| 亚洲iv一区二区三区| 亚洲丁香婷深爱综合| 久久影院在线观看| 久久av中文字幕| 久久久久久久91| 国产一区二区黑人欧美xxxx| 中文字幕亚洲专区| 美乳少妇欧美精品| 亚洲精品自拍偷拍| 亚洲欧洲成视频免费观看| 欧美激情国内偷拍| 日韩在线高清视频| 国产视频亚洲视频| 国产视频久久久久久久| 91久久久精品| 欧美高跟鞋交xxxxhd| 中文字幕日韩精品在线观看| 在线免费观看羞羞视频一区二区| 国产成人在线一区二区| 欧美精品国产精品日韩精品| 中文字幕欧美日韩| 亚洲变态欧美另类捆绑| 欧美国产一区二区三区| 中文字幕在线看视频国产欧美| 国产大片精品免费永久看nba| 亚洲午夜精品久久久久久久久久久久| 国产精品三级久久久久久电影| 国产欧洲精品视频| 久久久久国色av免费观看性色| 欧美成人性生活| 欧洲日本亚洲国产区| 国产日韩中文字幕| 日韩精品一二三四区| 少妇高潮 亚洲精品| 久久久综合免费视频| 亚洲欧美日韩一区二区三区在线| 国产精品久久久精品| 国模精品一区二区三区色天香| 国产自产女人91一区在线观看| 日本一区二区三区在线播放| 国产精品午夜国产小视频| www.欧美免费| 91免费国产视频| 不卡av在线播放| 亚洲午夜av久久乱码| 日本一区二区三区在线播放| 日本免费久久高清视频| 欧美日本在线视频中文字字幕| 欧美电影院免费观看| 国产精品久久电影观看| 亚洲精品一区中文字幕乱码| 国产主播喷水一区二区| 国产成人a亚洲精品| 国产精品第七影院| 欧美极品欧美精品欧美视频| 粉嫩老牛aⅴ一区二区三区| 国产精品嫩草视频| 日韩毛片中文字幕| 国产精品美乳在线观看| 久久精品一偷一偷国产| 亚洲成年人在线| www.亚洲人.com| 国产精品h片在线播放| 国产精品国产三级国产aⅴ浪潮| 国产xxx69麻豆国语对白| 2019国产精品自在线拍国产不卡| 国产一区视频在线| 国产精品永久免费视频| 热99在线视频| 欧美韩国理论所午夜片917电影| 久久91亚洲人成电影网站| 久久精品视频免费播放| 亚洲午夜精品视频| 国产精品老女人视频| 欧美日韩成人黄色| 国产精品久久久久久久久免费看| 精品美女久久久久久免费| 久久久伊人日本| 中文国产亚洲喷潮| 国产精品香蕉国产| 国产精品天天狠天天看| 久久免费观看视频| 亚洲石原莉奈一区二区在线观看| 国产亚洲一区精品| 日韩欧美黄色动漫| 日日狠狠久久偷偷四色综合免费| 久久视频在线观看免费| 欧美成人免费视频| 日韩精品极品视频| 欧美激情视频免费观看| 成人午夜激情网| 成人av.网址在线网站| 欧美大胆在线视频| 久久久精品国产一区二区| 国产成人免费av| 欧美激情乱人伦| 欧美国产日韩一区| 欧美在线观看视频| 亚洲色无码播放| 国产成+人+综合+亚洲欧洲| 亚洲精品一区久久久久久| 美女国内精品自产拍在线播放| 精品国产精品三级精品av网址| 国产91在线高潮白浆在线观看| 自拍偷拍亚洲欧美| 久久91亚洲人成电影网站| 亚洲精品久久视频| 7m第一福利500精品视频| 国产一区二区三区直播精品电影| 亚洲国产精品久久久久秋霞不卡| 热re99久久精品国产66热| www.亚洲天堂| 国产精品免费一区| 久久伊人精品视频| 欧美高清视频在线播放| 国产精品福利网站| 国产精品入口日韩视频大尺度| 国产精品视频精品| 亚洲最大福利视频网站| 国产精品久久久久久久久久久久久| 欧美国产精品va在线观看| 蜜臀久久99精品久久久无需会员| 欧美激情精品久久久久久免费印度| 精品无人国产偷自产在线| 亚洲欧美精品在线| 日韩在线欧美在线| 国产v综合ⅴ日韩v欧美大片| 成人免费高清完整版在线观看| 4438全国成人免费| 国产中文字幕日韩| 欧美在线观看一区二区三区| 国产亚洲精品高潮| 久久中国妇女中文字幕| 精品调教chinesegay| 欧美日韩免费网站| 亚洲加勒比久久88色综合| 日韩福利在线播放| 麻豆国产精品va在线观看不卡| 欧美日韩国产激情| 国产免费一区二区三区在线能观看| 日韩人体视频一二区| 国产一区二区激情| 精品久久久国产精品999| 亚洲欧美激情四射在线日| 欧美电影免费观看电视剧大全| 亚洲一区二区福利| 日韩中文字幕在线精品| 久久夜精品va视频免费观看| 欧美日韩国产色视频| 日韩精品一二三四区| 精品亚洲一区二区三区| 欧美韩国理论所午夜片917电影| 国产精品久久久久久搜索| 欧美性色xo影院| 国产91九色视频| 日韩美女在线播放| 亚洲高清福利视频| 国产自摸综合网| 精品成人乱色一区二区| 久久夜色精品国产欧美乱|