SSO單點登入的PHP實現方法(Laravel架構)_php執行個體

來源:互聯網
上載者:User

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架構),小編就給大家介紹這麼多,希望對大家有所協助!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.