国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

SSO單點登錄系統接入的例子

2024-05-04 21:50:41
字體:
來源:轉載
供稿:網友

簡單講一下 SSO 單點登錄系統的接入的原理,前提是系統本身有完善的用戶認證功能,即基本的用戶登錄功能,那做起來就很方便了。

SSO 登錄請求接口往往是接口加上一個回調地址,訪問這個地址會跳轉到回調地址并帶上一個 ticket 參數,拿著這個 ticket 參數再請求接口可以獲取到用戶信息,如果存在用戶則自動登錄,不存在就新增用戶并登錄。

比如這個 SSO 模型實現了兩個方法,一個是獲取接口 url,一個是憑 ticket 獲取用戶信息:

PHP:

  1. interface SSOLogin 
  2.     /** 
  3.      * 獲取登錄用戶信息 
  4.      * @param $ticket 
  5.      * @return mixed 
  6.      */ 
  7.     public function getInfoFromTicket($ticket); 
  8.  
  9.     /** 
  10.      * 單點登錄授權地址 
  11.      * @return mixed 
  12.      */ 
  13.     public function getAuthUrl(); 

再來看看控制器的主要方法,比如回調地址是跳轉到控制器 http://www.example.com/sso/check?ticket=xxxx

  1. /** 
  2.  * 檢測是否單點登錄 
  3.  * @return bool|string 
  4.  */ 
  5. public function actionCheck() 
  6.     $ticket = Yii::$app->getRequest()->get('ticket'); 
  7.     if (!$ticket) { 
  8.         return $this->renderAuthError('請先授權', sprintf('<a href="%s">點擊登錄單點登錄系統</a>', SSOlogin::getInstance()->getAuthUrl())); 
  9.     } 
  10.     $userInfo = SSOlogin::getInstance()->getInfoFromTicket($ticket); 
  11.     if (emptyempty($userInfo['username'])) { 
  12.         return $this->renderAuthError('請先授權', sprintf('<a href="%s">點擊登錄單點登錄系統</a>', SSOlogin::getInstance()->getAuthUrl())); 
  13.     } 
  14.  
  15.     $username = $this->getUserName($userInfo['username']); 
  16.     $user = User::find()->canLogin()->username($username)->one(); 
  17.     if (!$user) { 
  18.         $newUser = []; 
  19.         $newUser['username'] = $userInfo['username']; 
  20.         $newUser['email'] = $this->getUserName($userInfo['username']); 
  21.         $newUser['role'] = User::ROLE_DEV; 
  22.         $newUser['is_email_verified'] = 1; 
  23.         $newUser['realname'] = $userInfo['truename']; 
  24.         $user = $this->addUser($newUser); 
  25.     } 
  26.     $isLogin = Yii::$app->user->login($user, 3600 * 24 * 30); 
  27.     if ($isLogin) { 
  28.         $this->redirect('/task/index'); 
  29.     } //Vevb.com 
  30.     return true; 

大概看看這個控制器邏輯就明白了。SSO 接口起到的作用就是獲取用戶信息,拿這個用戶信息跟系統用戶表對比,存在用戶則進行登錄,不存在創建用戶并登錄。

這是一個內部的單點系統,集成到后臺,可能其他的 SSO 跟這不太一樣,但基本原理過程差不多。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凯里市| 呼伦贝尔市| 贵定县| 泸州市| 湘乡市| 苏尼特左旗| 东莞市| 海宁市| 平定县| 友谊县| 通渭县| 合肥市| 玛曲县| 中卫市| 文成县| 原阳县| 嘉禾县| 恩平市| 湘潭市| 灌南县| 肥西县| 佛学| 邢台县| 察隅县| 高青县| 永德县| 三明市| 永胜县| 杭锦旗| 崇阳县| 海淀区| 忻州市| 徐汇区| 岳池县| 子洲县| 安乡县| 南开区| 泗阳县| 新竹县| 仁化县| 米林县|