国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

SSO單點登錄的PHP實現方法(Laravel框架)

2024-05-04 23:44:20
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了SSO單點登錄的PHP實現方法(Laravel框架) 的相關資料,需要的朋友可以參考下
 

Laravel是一套簡潔、優雅的PHP Web開發框架(PHP Web Framework)。它可以讓你從面條一樣雜亂的代碼中解脫出來;它可以幫你構建一個完美的網絡APP,而且每行代碼都可以簡潔、富于表達力。

簡單說一下我的邏輯,我也不知道我理解sso對不對。

假如三個站點 a.baidu.com b.baidu.com c.baidu.com

a.baidu.com 作為驗證用戶登錄賬戶。

b和c作為客戶端(子系統)。

b和c需要登錄的時候跳轉到a,并且攜帶參數source指明登陸后跳轉的鏈接。

a站點就是普通的登陸方式(校驗用戶密碼),校驗成功后做一些處理。需要生成一個ticket,具體怎么生成都可以,只要安全就可以了。然后存儲到Cache里面。這里有疑問,后面總結。登陸成功后直接跳轉到/(url就可以了。

 ``` php private function getTicketUrl(/)source){/(ticket = md5(time()+key); Cache::put(/)ticket, $user, 120);$url = $source . '?ticket=' . $ticket;return $url;}

假如說a站帶著ticket跳轉到b站(b.baidu.com?ticket=xxxxxxxxxxxxxxxx```)

b站做一個全局的過濾器,接受這個ticket然后請求a站驗證ticket是否為a生成的。

b站過濾器App/Http/Middleware/CasAuthenticate代碼,這里判斷是否有ticket并發送請求到a站校驗。如果是登陸的,則拿到用戶UID進行登陸。

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);} 

邏輯算是完成了,但是有幾個疑問。

1.我這個實現,我自己都不知道是不是對的,這是我根據原理寫出來的。

2.假如b站現在跳轉到c站,由于b站活躍比較頻繁,session一直都在,而a站的緩存時間極有可能已經過期了,此時從b站跳轉到c站,c站跳轉到a站去判斷登陸,結果發現已經失效了,還是得登陸。所以這是有問題的,由于我們業務模塊相關性差,不會隨意跳轉,所以暫不考慮這樣的問題。但這確實是我的一個問題。我沒想清楚。

有關SSO單點登錄的PHP實現方法(Laravel框架),小編就給大家介紹這么多,希望對大家有所幫助!



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 招远市| 偃师市| 侯马市| 体育| 江津市| 张家港市| 许昌市| 河曲县| 天气| 永年县| 长泰县| 五莲县| 额尔古纳市| 米脂县| 胶州市| 扎鲁特旗| 景谷| 南漳县| 北海市| 盖州市| 金山区| 东乡县| 建阳市| 汶川县| 安多县| 临洮县| 阿坝县| 英吉沙县| 金寨县| 江津市| 广西| 南木林县| 靖安县| 峨眉山市| 溧阳市| 航空| 根河市| 弥渡县| 泸州市| 湖北省| 凤阳县|