首頁  >  文章  >  後端開發  >  php如何實現SSO登入

php如何實現SSO登入

藏色散人
藏色散人原創
2021-12-30 10:06:192606瀏覽

php實作SSO登入的方法:1、使用者進入登入頁產生自訂SID,寫入redis和cookie;2、在業務的BaseController的建構函數,寫一個更新redis的操作;3、js建構跳轉事件,然後服務端根據SID查看該用戶存redis。

php如何實現SSO登入

本文操作環境:Windows7系統、PHP7.1版、Dell G3電腦。

php如何實作SSO登入?

SSO單一登入設計及PHP實作

建議先熟悉單一登入SSO相關概念。

 

1、SSO:單點登錄,一次登錄,所有相關係統均可進入,無需重複登入

2、實作方案:共用【頂級網域】cookie裡的S【ID】 【跨域SID】

3、棄用PHP的session,將用戶資訊存於redis

4、每次用戶合法操作,在業務的BaseController的建構函數,寫一個更新redis的操作,皆更新redis存放使用者登入態的expireTime  -- 目的模擬session過期

 

5、特定SSO實作單一登入:(棄用PHPsessionId ) -- 認證使用者登入api,統一放在sso伺服器,其他登入頁面都會呼叫該介面。

1)SSO單一登入認證:使用者進入登入頁產生自訂SID,寫入redis和cookie;提交帳號密碼,調SSO認證api通過,SSO需要將使用者和cookie裡面SID綁定, (LoginAction/ssologin/321行:api::get裡面)

本地伺服器產生token(2個都是自訂的欄位和規則)存於redis,有效期限建議30分鐘,

2)在業務的BaseController的建構函數,寫一個更新redis的操作,有業務來就更新對應SID和token有效期(即30分鐘無操作,登錄態過期), -- 目的模擬session過期

3)SID存於cookie網域必須是頂級網域如【.example.com】,cookie有效期限建議一個月;

4)使用者從剛才登入的網域網頁,直接點選其他子網域< a 連結>,a連結不需要帶明文SID或token,因為cookie會自己帶上SID,伺服器根據cookie裡面的SID,去SSO調認證介面看SID對應redis的資料是否有效;

6、跨網域登錄,例如我想登入不是【.example.com】下的網域如:erji.mogo.com,但我用的是同一個SSO認證體系,咋辦?

還在是剛剛登入的網域網頁,js建構一個跳轉事件,跳轉的url?&SID=xxx就行了,可以用jQuery.cookie.js 從cookie拿到SID,然後服務端也是根據SID查看該用戶存redis資料是否過期。

 

推薦學習:《PHP影片教學

以上是php如何實現SSO登入的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn