溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

使用PHP怎么實(shí)現(xiàn)一個(gè)SSO單點(diǎn)登錄功能

發(fā)布時(shí)間:2021-02-07 20:49:21 來源:億速云 閱讀:157 作者:Leah 欄目:開發(fā)技術(shù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)使用PHP怎么實(shí)現(xiàn)一個(gè)SSO單點(diǎn)登錄功能,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

假如三個(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);
}

上述就是小編為大家分享的使用PHP怎么實(shí)現(xiàn)一個(gè)SSO單點(diǎn)登錄功能了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI