本文執行個體講述了php實現的SSO單點登入系統接入功能。分享給大家供大家參考,具體如下:
SSO英文全稱Single Sign On,單點登入。SSO是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。它包括可以將這次主要的登入映射到其他應用中用於同一個使用者的登入的機制。它是目前比較流行的企業業務整合的解決方案之一,下面我們來看看吧。
簡單講一下 SSO 單點登入系統的接入的原理,前提是系統本身有完善的使用者認證功能,即基本的使用者登入功能,那做起來就很方便了。
SSO 登入請求介面往往是介面加上一個回調地址,訪問這個地址會跳轉到回調地址並帶上一個 ticket 參數,拿著這個 ticket 參數再請求介面可以擷取到使用者資訊,如果存在使用者則自動登入,不存在就新增使用者並登入。
比如這個 SSO 模型實現了兩個方法,一個是擷取介面 url,一個是憑 ticket 擷取使用者資訊:
interface SSOLogin{ /** * 擷取登入使用者資訊 * @param $ticket * @return mixed */ public function getInfoFromTicket($ticket); /** * 單點登入授權地址 * @return mixed */ public function getAuthUrl();}
再來看看控制器的主要方法,比如回調地址是跳轉到控制器 http://www.example.com/sso/check?ticket=xxxx
/** * 檢測是否單點登入 * @return bool|string */public function actionCheck(){ $ticket = Yii::$app->getRequest()->get('ticket'); if (!$ticket) { return $this->renderAuthError('請先授權', sprintf('<a href="%s">點擊登入單點登入系統</a>', SSOlogin::getInstance()->getAuthUrl())); } $userInfo = SSOlogin::getInstance()->getInfoFromTicket($ticket); if (empty($userInfo['username'])) { return $this->renderAuthError('請先授權', sprintf('<a href="%s">點擊登入單點登入系統</a>', SSOlogin::getInstance()->getAuthUrl())); } $username = $this->getUserName($userInfo['username']); $user = User::find()->canLogin()->username($username)->one(); if (!$user) { $newUser = []; $newUser['username'] = $userInfo['username']; $newUser['email'] = $this->getUserName($userInfo['username']); $newUser['role'] = User::ROLE_DEV; $newUser['is_email_verified'] = 1; $newUser['realname'] = $userInfo['truename']; $user = $this->addUser($newUser); } $isLogin = Yii::$app->user->login($user, 3600 * 24 * 30); if ($isLogin) { $this->redirect('/task/index'); } return true;}
大概看看這個控制器邏輯就明白了。SSO 介面起到的作用就是擷取使用者資訊,拿這個使用者資訊跟系統使用者表對比,存在使用者則進行登入,不存在建立使用者並登入。
這是一個內部的單點系統,整合到後台,可能其他的 SSO 跟這不太一樣,但基本原理過程差不多。
更多關於PHP相關內容感興趣的讀者可查看本站專題:《PHP網路編程技巧總結》、《php curl用法總結》、《php socket用法總結》、《phpRegex用法總結》、《php字串(string)用法總結》、《PHP數組(Array)操作技巧大全》、《PHP數學運算技巧總結》、《php物件導向程式設計入門教程》、《PHP資料結構與演算法教程》、《php程式設計演算法總結》及《php常見資料庫操作技巧匯總》
希望本文所述對大家PHP程式設計有所協助。