SSO單點(diǎn)登錄的PHP實(shí)現(xiàn)方法(Laravel框架)
來(lái)源:易賢網(wǎng) 閱讀:2764 次 日期:2016-08-31 16:13:56
溫馨提示:易賢網(wǎng)小編為您整理了“SSO單點(diǎn)登錄的PHP實(shí)現(xiàn)方法(Laravel框架)”,方便廣大網(wǎng)友查閱!

Laravel是一套簡(jiǎn)潔、優(yōu)雅的PHP Web開發(fā)框架(PHP Web Framework)。它可以讓你從面條一樣雜亂的代碼中解脫出來(lái);它可以幫你構(gòu)建一個(gè)完美的網(wǎng)絡(luò)APP,而且每行代碼都可以簡(jiǎn)潔、富于表達(dá)力。

簡(jiǎn)單說(shuō)一下我的邏輯,我也不知道我理解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里面。這里有疑問(wèn),后面總結(jié)。登陸成功后直接跳轉(zhuǎn)到\(url就可以了。

``` php private function getTicketUrl(\)source)

{

\(ticket = md5(time()+key); Cache::put(\)ticket, $user, 120);

$url = $source . '?ticket=' . $ticket;

return $url;

}

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

b站做一個(gè)全局的過(guò)濾器,接受這個(gè)ticket然后請(qǐng)求a站驗(yàn)證ticket是否為a生成的。

b站過(guò)濾器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è)疑問(wèn)。

1.我這個(gè)實(shí)現(xiàn),我自己都不知道是不是對(duì)的,這是我根據(jù)原理寫出來(lái)的。

2.假如b站現(xiàn)在跳轉(zhuǎn)到c站,由于b站活躍比較頻繁,session一直都在,而a站的緩存時(shí)間極有可能已經(jīng)過(guò)期了,此時(shí)從b站跳轉(zhuǎn)到c站,c站跳轉(zhuǎn)到a站去判斷登陸,結(jié)果發(fā)現(xiàn)已經(jīng)失效了,還是得登陸。所以這是有問(wèn)題的,由于我們業(yè)務(wù)模塊相關(guān)性差,不會(huì)隨意跳轉(zhuǎn),所以暫不考慮這樣的問(wèn)題。但這確實(shí)是我的一個(gè)問(wèn)題。我沒想清楚。

有關(guān)SSO單點(diǎn)登錄的PHP實(shí)現(xiàn)方法(Laravel框架),小編就給大家介紹這么多,希望對(duì)大家有所幫助!

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:SSO單點(diǎn)登錄的PHP實(shí)現(xiàn)方法(Laravel框架)
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65317125(9:00—18:00) 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)