《PHP學習:SSO單點登錄的PHP實現(xiàn)方法(Laravel框架)》要點:
本文介紹了PHP學習:SSO單點登錄的PHP實現(xiàn)方法(Laravel框架),希望對您有用。如果有疑問,可以聯(lián)系我們。
Laravel是一套簡潔、優(yōu)雅的PHP Web開發(fā)框架(PHP Web Framework).它可以讓你從面條一樣雜亂的代碼中擺脫出來;它可以幫你構(gòu)建一個完美的網(wǎng)絡(luò)APP,而且每行代碼都可以簡潔、富于表達力.PHP學習
簡單說一下我的邏輯,我也不知道我理解sso對不對.
PHP學習
假如三個站點 a.baidu.com b.baidu.com c.baidu.com
PHP學習
a.baidu.com 作為驗證用戶登錄賬戶.PHP學習
b和c作為客戶端(子系統(tǒng)).
PHP學習
b和c需要登錄的時候跳轉(zhuǎn)到a,并且攜帶參數(shù)source指明登陸后跳轉(zhuǎn)的鏈接.
PHP學習
a站點就是普通的登陸方式(校驗用戶密碼),校驗成功后做一些處理.需要生成一個ticket,具體怎么生成都可以,只要平安就可以了.然后存儲到Cache里面.這里有疑問,后面總結(jié).登陸成功后直接跳轉(zhuǎn)到\(url就可以了.PHP學習
``` 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```)
PHP學習
b站做一個全局的過濾器,接受這個ticket然后哀求a站驗證ticket是否為a生成的.
PHP學習
b站過濾器App\Http\Middleware\CasAuthenticate代碼,這里判斷是否有ticket并發(fā)送哀求到a站校驗.如果是登陸的,則拿到用戶UID進行登陸.
PHP學習
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); }
邏輯算是完成了,但是有幾個疑問.
PHP學習
1.我這個實現(xiàn),我自己都不知道是不是對的,這是我根據(jù)原理寫出來的.
PHP學習
2.假如b站現(xiàn)在跳轉(zhuǎn)到c站,由于b站活躍比較頻繁,session一直都在,而a站的緩存時間極有可能已經(jīng)過期了,此時從b站跳轉(zhuǎn)到c站,c站跳轉(zhuǎn)到a站去判斷登陸,結(jié)果發(fā)現(xiàn)已經(jīng)失效了,還是得登陸.所以這是有問題的,由于我們業(yè)務(wù)模塊相關(guān)性差,不會隨意跳轉(zhuǎn),所以暫不考慮這樣的問題.但這確實是我的一個問題.我沒想清楚.PHP學習
有關(guān)SSO單點登錄的PHP實現(xiàn)辦法(Laravel框架),小編就給大家介紹這么多,希望對大家有所幫助!PHP學習
《PHP學習:SSO單點登錄的PHP實現(xiàn)方法(Laravel框架)》是否對您有啟發(fā),歡迎查看更多與《PHP學習:SSO單點登錄的PHP實現(xiàn)方法(Laravel框架)》相關(guān)教程,學精學透。維易PHP學院為您提供精彩教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/7256.html