您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關使用PHP怎么實現一個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); }
上述就是小編為大家分享的使用PHP怎么實現一個SSO單點登錄功能了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。