SSO單點(diǎn)登錄的PHP實(shí)現(xiàn)方法(Laravel框架)
Laravel是一套簡潔、優(yōu)雅的PHP Web開發(fā)框架(PHP Web Framework)。它可以讓你從面條一樣雜亂的代碼中解脫出來;它可以幫你構(gòu)建一個(gè)完美的網(wǎng)絡(luò)APP,而且每行代碼都可以簡潔、富于表達(dá)力。
簡單說一下我的邏輯,我也不知道我理解sso對(duì)不對(duì)。
假如三個(gè)站點(diǎn) a.baidu.com b.baidu.com c.baidu.com
a.baidu.com 作為驗(yàn)證用戶登錄賬戶。
b和c作為客戶端(子系統(tǒng))。
b和c需要登錄的時(shí)候跳轉(zhuǎn)到a,并且攜帶參數(shù)source指明登陸后跳轉(zhuǎn)的鏈接。
a站點(diǎn)就是普通的登陸方式(校驗(yàn)用戶密碼),校驗(yàn)成功后做一些處理。需要生成一個(gè)ticket,具體怎么生成都可以,只要安全就可以了。然后存儲(chǔ)到Cache里面。這里有疑問,后面總結(jié)。登陸成功后直接跳轉(zhuǎn)到\(url就可以了。
``` php private function getTicketUrl(\)source) { \(ticket = md5(time()+key); Cache::put(\)ticket, $user, 120); $url = $source . '?ticket=' . $ticket; return $url; }
假如說a站帶著ticket跳轉(zhuǎn)到b站(b.baidu.com?ticket=xxxxxxxxxxxxxxxx```)
b站做一個(gè)全局的過濾器,接受這個(gè)ticket然后請(qǐng)求a站驗(yàn)證ticket是否為a生成的。
b站過濾器App\Http\Middleware\CasAuthenticate代碼,這里判斷是否有ticket并發(fā)送請(qǐng)求到a站校驗(yàn)。如果是登陸的,則拿到用戶UID進(jìn)行登陸。
public function handle($request, Closure $next) { $ticket = $request->input('ticket'); if ($ticket) { $result = json_decode('http://a.baidu.com' . '/auth/check-ticket?ticket=' . $ticket), true); if ($result['state'] == "SUCCESS") { $request->session()->flush(); Auth::loginUsingId($result['result']['uid']); return redirect(redirect()->getUrlGenerator()->current()); } } return $next($request); }
邏輯算是完成了,但是有幾個(gè)疑問。
1.我這個(gè)實(shí)現(xiàn),我自己都不知道是不是對(duì)的,這是我根據(jù)原理寫出來的。
2.假如b站現(xiàn)在跳轉(zhuǎn)到c站,由于b站活躍比較頻繁,session一直都在,而a站的緩存時(shí)間極有可能已經(jīng)過期了,此時(shí)從b站跳轉(zhuǎn)到c站,c站跳轉(zhuǎn)到a站去判斷登陸,結(jié)果發(fā)現(xiàn)已經(jīng)失效了,還是得登陸。所以這是有問題的,由于我們業(yè)務(wù)模塊相關(guān)性差,不會(huì)隨意跳轉(zhuǎn),所以暫不考慮這樣的問題。但這確實(shí)是我的一個(gè)問題。我沒想清楚。
有關(guān)SSO單點(diǎn)登錄的PHP實(shí)現(xiàn)方法(Laravel框架),小編就給大家介紹這么多,希望對(duì)大家有所幫助!
- Laravel實(shí)現(xiàn)用戶注冊(cè)和登錄
- Laravel搭建后臺(tái)登錄系統(tǒng)步驟詳解
- Laravel 自帶的Auth驗(yàn)證登錄方法
- Laravel 5.4重新登錄實(shí)現(xiàn)跳轉(zhuǎn)到登錄前頁面的原理和方法
- Laravel重寫用戶登錄簡單示例
- 利用Laravel事件系統(tǒng)如何實(shí)現(xiàn)登錄日志的記錄詳解
- Laravel5.2使用Captcha生成驗(yàn)證碼實(shí)現(xiàn)登錄(session巨坑)
- php的laravel框架快速集成微信登錄的方法
- laravel5.2實(shí)現(xiàn)區(qū)分前后臺(tái)用戶登錄的方法
- Laravel登錄失敗次數(shù)限制的實(shí)現(xiàn)方法
相關(guān)文章
ThinkPHP實(shí)現(xiàn)動(dòng)態(tài)包含文件的方法
這篇文章主要介紹了ThinkPHP實(shí)現(xiàn)動(dòng)態(tài)包含文件的方法,是進(jìn)行ThinkPHP項(xiàng)目開發(fā)中非常實(shí)用的技巧,需要的朋友可以參考下2014-11-11PHP使用Face++接口開發(fā)微信公眾平臺(tái)人臉識(shí)別系統(tǒng)的方法
這篇文章主要介紹了PHP使用Face++接口開發(fā)微信公眾平臺(tái)人臉識(shí)別系統(tǒng)的方法,涉及微信公眾平臺(tái)相關(guān)接口的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04php強(qiáng)制文件下載而非在瀏覽器打開的自定義函數(shù)分享
這篇文章主要介紹了php強(qiáng)制文件下載而非在瀏覽器打開的自定義函數(shù)分享,需要的朋友可以參考下2014-05-05php無限級(jí)分類實(shí)現(xiàn)評(píng)論及回復(fù)功能
這篇文章主要為大家詳細(xì)介紹了php無限級(jí)分類實(shí)現(xiàn)評(píng)論及回復(fù)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02PHP輸出當(dāng)前進(jìn)程所有變量/常量/模塊/函數(shù)/類的示例
PHP輸出當(dāng)前進(jìn)程所有變量、常量、模塊、函數(shù)、類的示例2013-11-11關(guān)于UEditor編輯器遠(yuǎn)程圖片上傳失敗的解決辦法
因?yàn)閱渭兿矚g UEditor 的界面,于是把項(xiàng)目中原先的編輯器進(jìn)行的替換,但在后續(xù)操作中發(fā)現(xiàn)一些問題,就是遠(yuǎn)程圖片上傳2012-08-08