這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)使用PHP怎么實現(xiàn)一個SSO單點登錄功能,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
我們提供的服務(wù)有:網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、廬陽ssl等。為上1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的廬陽網(wǎng)站制作公司假如三個站點 a.baidu.com b.baidu.com c.baidu.com
a.baidu.com 作為驗證用戶登錄賬戶。
b和c作為客戶端(子系統(tǒng))。
b和c需要登錄的時候跳轉(zhuǎn)到a,并且攜帶參數(shù)source指明登陸后跳轉(zhuǎn)的鏈接。
a站點就是普通的登陸方式(校驗用戶密碼),校驗成功后做一些處理。需要生成一個ticket,具體怎么生成都可以,只要安全就可以了。然后存儲到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站做一個全局的過濾器,接受這個ticket然后請求a站驗證ticket是否為a生成的。
b站過濾器App\Http\Middleware\CasAuthenticate代碼,這里判斷是否有ticket并發(fā)送請求到a站校驗。如果是登陸的,則拿到用戶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怎么實現(xiàn)一個SSO單點登錄功能了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。