php實(shí)現(xiàn)的SSO單點(diǎn)登錄系統(tǒng)接入功能示例分析
本文實(shí)例講述了php實(shí)現(xiàn)的SSO單點(diǎn)登錄系統(tǒng)接入功能。分享給大家供大家參考,具體如下:
SSO英文全稱Single Sign On,單點(diǎn)登錄。SSO是在多個(gè)應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng)。它包括可以將這次主要的登錄映射到其他應(yīng)用中用于同一個(gè)用戶的登錄的機(jī)制。它是目前比較流行的企業(yè)業(yè)務(wù)整合的解決方案之一,下面我們來看看吧。
簡(jiǎn)單講一下 SSO 單點(diǎn)登錄系統(tǒng)的接入的原理,前提是系統(tǒng)本身有完善的用戶認(rèn)證功能,即基本的用戶登錄功能,那做起來就很方便了。
SSO 登錄請(qǐng)求接口往往是接口加上一個(gè)回調(diào)地址,訪問這個(gè)地址會(huì)跳轉(zhuǎn)到回調(diào)地址并帶上一個(gè) ticket 參數(shù),拿著這個(gè) ticket 參數(shù)再請(qǐng)求接口可以獲取到用戶信息,如果存在用戶則自動(dòng)登錄,不存在就新增用戶并登錄。
比如這個(gè) SSO 模型實(shí)現(xiàn)了兩個(gè)方法,一個(gè)是獲取接口 url,一個(gè)是憑 ticket 獲取用戶信息:
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=xxxx
/** * 檢測(cè)是否單點(diǎn)登錄 * @return bool|string */ public function actionCheck() { $ticket = Yii::$app->getRequest()->get('ticket'); if (!$ticket) { return $this->renderAuthError('請(qǐng)先授權(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('請(qǐng)先授權(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; }
大概看看這個(gè)控制器邏輯就明白了。SSO 接口起到的作用就是獲取用戶信息,拿這個(gè)用戶信息跟系統(tǒng)用戶表對(duì)比,存在用戶則進(jìn)行登錄,不存在創(chuàng)建用戶并登錄。
這是一個(gè)內(nèi)部的單點(diǎn)系統(tǒng),集成到后臺(tái),可能其他的 SSO 跟這不太一樣,但基本原理過程差不多。
更多關(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ù)庫操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- php的sso單點(diǎn)登錄實(shí)現(xiàn)方法
- PHP簡(jiǎn)單實(shí)現(xiàn)單點(diǎn)登錄功能示例
- SSO單點(diǎn)登錄的PHP實(shí)現(xiàn)方法(Laravel框架)
- PHP實(shí)現(xiàn)cookie跨域session共享的方法分析
- ThinkPHP框架實(shí)現(xiàn)session跨域問題的解決方法
- php中http與https跨域共享session的解決方法
- PHP關(guān)于IE下的iframe跨域?qū)е聅ession丟失問題解決方法
- PHP簡(jiǎn)單實(shí)現(xiàn)HTTP和HTTPS跨域共享session解決辦法
- php實(shí)現(xiàn)多站點(diǎn)共用session實(shí)現(xiàn)單點(diǎn)登錄的方法詳解
相關(guān)文章
php正則提取html圖片(img)src地址與任意屬性的方法
下面小編就為大家?guī)硪黄猵hp正則提取html圖片(img)src地址與任意屬性的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02PHP實(shí)踐教程之過濾、驗(yàn)證、轉(zhuǎn)義與密碼詳解
我們?cè)陂_發(fā)應(yīng)用時(shí),一般有個(gè)約定:不要信任任何來自不受自己控制的數(shù)據(jù)源中的數(shù)據(jù)。所以這個(gè)時(shí)候就用到了這篇文章介紹的內(nèi)容,本文主要給大家介紹了關(guān)于PHP實(shí)踐教程之過濾、驗(yàn)證、轉(zhuǎn)義與密碼的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07php實(shí)現(xiàn)MD5加密16位(不要默認(rèn)的32位)
今天做了個(gè)php鏈接mssql數(shù)據(jù)庫,數(shù)據(jù)庫中的表中字段使用MD5十六加密的。但是php中的MD5默認(rèn)是32位,導(dǎo)致登錄程序沒辦法使用md5加密跟表中字段匹配,在網(wǎng)上一搜也有不少人有這方面的困惑,后來找到一個(gè)解決辦法,是正確的,就記錄下來2013-08-08PHP實(shí)現(xiàn)數(shù)組根據(jù)某個(gè)字段進(jìn)行水平合并,橫向合并案例分析
這篇文章主要介紹了PHP實(shí)現(xiàn)數(shù)組根據(jù)某個(gè)字段進(jìn)行水平合并,橫向合并,結(jié)合具體案例形式分析了php數(shù)組遍歷、合并等相關(guān)操作技巧,需要的朋友可以參考下2019-10-10關(guān)于mysql字符集設(shè)置了character_set_client=binary 在gbk情況下會(huì)出現(xiàn)表描述是亂碼的情況
今天在處理bug的時(shí)候,又發(fā)現(xiàn)一個(gè)奇怪的問題,在設(shè)置mysql的編碼為gbk的情況下,發(fā)現(xiàn)建立出來的表,凡是表結(jié)構(gòu)無論是字段還是表結(jié)構(gòu)描述是中文的時(shí)候,建立出來的表結(jié)構(gòu)描述是亂碼,經(jīng)過排查原來是character_set_client=binary惹的禍2013-01-01php json_encode值中大括號(hào)與花括號(hào)區(qū)別
這篇文章主要介紹了json_encode值中大括號(hào)與花括號(hào)區(qū)別,具體的看下實(shí)例說明,需要的朋友參考下2013-09-09php開啟與關(guān)閉錯(cuò)誤提示適用于沒有修改php.ini的權(quán)限
本節(jié)為大家介紹的是php開啟與關(guān)閉錯(cuò)誤提示的方法,如果不具備修改php.ini的權(quán)限,可以將如下代碼加入php文件中2014-10-10php 數(shù)組排序 array_multisort與uasort的區(qū)別
其實(shí),簡(jiǎn)單的說兩者的最重要的區(qū)別:array_multisort()排序之后,原數(shù)組“鍵”丟失。uasort()排序之后,保留原來的“鍵”。2011-03-03php采集文章中的圖片獲取替換到本地(實(shí)現(xiàn)代碼)
本篇文章是對(duì)php采集文章中的圖片獲取替換到本地的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07