《PHP編程:php實(shí)現(xiàn)的SSO單點(diǎn)登錄系統(tǒng)接入功能示例分析》要點(diǎn):
本文介紹了PHP編程:php實(shí)現(xiàn)的SSO單點(diǎn)登錄系統(tǒng)接入功能示例分析,希望對您有用。如果有疑問,可以聯(lián)系我們。
本文實(shí)例講述了php實(shí)現(xiàn)的SSO單點(diǎn)登錄系統(tǒng)接入功能.分享給大家供大家參考,具體如下:PHP編程
SSO英文全稱Single Sign On,單點(diǎn)登錄.SSO是在多個應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng).它包括可以將這次主要的登錄映射到其他應(yīng)用中用于同一個用戶的登錄的機(jī)制.它是目前比較流行的企業(yè)業(yè)務(wù)整合的解決方案之一,下面我們來看看吧.PHP編程
簡單講一下 SSO 單點(diǎn)登錄系統(tǒng)的接入的原理,前提是系統(tǒng)本身有完善的用戶認(rèn)證功能,即基本的用戶登錄功能,那做起來就很方便了.PHP編程
SSO 登錄請求接口往往是接口加上一個回調(diào)地址,訪問這個地址會跳轉(zhuǎn)到回調(diào)地址并帶上一個 ticket 參數(shù),拿著這個 ticket 參數(shù)再請求接口可以獲取到用戶信息,如果存在用戶則自動登錄,不存在就新增用戶并登錄.PHP編程
比如這個 SSO 模型實(shí)現(xiàn)了兩個方法,一個是獲取接口 url,一個是憑 ticket 獲取用戶信息:PHP編程
interface SSOLogin { /** * 獲取登錄用戶信息 * @param $ticket * @return mixed */ public function getInfoFromTicket($ticket); /** * 單點(diǎn)登錄授權(quán)地址 * @return mixed */ public function getAuthUrl(); }
再來看看控制器的主要方法,比如回調(diào)地址是跳轉(zhuǎn)到控制器 http://www.example.com/sso/check?ticket=xxxxPHP編程
/** * 檢測是否單點(diǎn)登錄 * @return bool|string */ public function actionCheck() { $ticket = Yii::$app->getRequest()->get('ticket'); if (!$ticket) { return $this->renderAuthError('請先授權(quán)', sprintf('<a href="%s">點(diǎn)擊登錄單點(diǎn)登錄系統(tǒng)</a>', SSOlogin::getInstance()->getAuthUrl())); } $userInfo = SSOlogin::getInstance()->getInfoFromTicket($ticket); if (empty($userInfo['username'])) { return $this->renderAuthError('請先授權(quán)', sprintf('<a href="%s">點(diǎn)擊登錄單點(diǎn)登錄系統(tǒng)</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 接口起到的作用就是獲取用戶信息,拿這個用戶信息跟系統(tǒng)用戶表對比,存在用戶則進(jìn)行登錄,不存在創(chuàng)建用戶并登錄.PHP編程
這是一個內(nèi)部的單點(diǎn)系統(tǒng),集成到后臺,可能其他的 SSO 跟這不太一樣,但基本原理過程差不多.PHP編程
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《php curl用法總結(jié)》、《php socket用法總結(jié)》、《php正則表達(dá)式用法總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》及《php常見數(shù)據(jù)庫操作技巧匯總》PHP編程
希望本文所述對大家PHP程序設(shè)計(jì)有所幫助.PHP編程
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/3082.html