php實現的SSO單點登入系統接入功能執行個體分析

來源:互聯網
上載者:User
這篇文章主要介紹了php實現的SSO單點登入系統接入功能,簡單分析了SSO單點登入系統接入的原理與php相關實現技巧,需要的朋友可以參考下

SSO英文全稱Single Sign On,單點登入。SSO是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。它包括可以將這次主要的登入映射到其他應用中用於同一個使用者的登入的機制。它是目前比較流行的企業業務整合的解決方案之一,下面我們來看看吧。

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

SSO 登入請求介面往往是介面加上一個回調地址,訪問這個地址會跳轉到回調地址並帶上一個 ticket 參數,拿著這個 ticket 參數再請求介面可以擷取到使用者資訊,如果存在使用者則自動登入,不存在就新增使用者並登入。

比如這個 SSO 模型實現了兩個方法,一個是擷取介面 url,一個是憑 ticket 擷取使用者資訊:

interface SSOLogin{  /**   * 擷取登入使用者資訊   * @param $ticket   * @return mixed   */  public function getInfoFromTicket($ticket);  /**   * 單點登入授權地址   * @return mixed   */  public function getAuthUrl();}

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

/** * 檢測是否單點登入 * @return bool|string */public function actionCheck(){  $ticket = Yii::$app->getRequest()->get('ticket');  if (!$ticket) {    return $this->renderAuthError('請先授權', sprintf('<a href="%s">點擊登入單點登入系統</a>', SSOlogin::getInstance()->getAuthUrl()));  }  $userInfo = SSOlogin::getInstance()->getInfoFromTicket($ticket);  if (empty($userInfo['username'])) {    return $this->renderAuthError('請先授權', sprintf('<a href="%s">點擊登入單點登入系統</a>', SSOlogin::getInstance()->getAuthUrl()));  }  $username = $this->getUserName($userInfo['username']);  $user = User::find()->canLogin()->username($username)->one();  if (!$user) {    $newUser = [];    $newUser['username'] = $userInfo['username'];    $newUser['email'] = $this->getUserName($userInfo['username']);    $newUser['role'] = User::ROLE_DEV;    $newUser['is_email_verified'] = 1;    $newUser['realname'] = $userInfo['truename'];    $user = $this->addUser($newUser);  }  $isLogin = Yii::$app->user->login($user, 3600 * 24 * 30);  if ($isLogin) {    $this->redirect('/task/index');  }  return true;}

大概看看這個控制器邏輯就明白了。SSO 介面起到的作用就是擷取使用者資訊,拿這個使用者資訊跟系統使用者表對比,存在使用者則進行登入,不存在建立使用者並登入。

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

總結:以上就是本篇文的全部內容,希望能對大家的學習有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.