php實作SSO登入的方法:1、使用者進入登入頁產生自訂SID,寫入redis和cookie;2、在業務的BaseController的建構函數,寫一個更新redis的操作;3、js建構跳轉事件,然後服務端根據SID查看該用戶存redis。
本文操作環境: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中文網其他相關文章!