php實作的SSO單一登入系統存取功能實例分析

墨辰丷
發布: 2023-03-28 20:48:01
原創
1787 人瀏覽過

這篇文章主要介紹了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(&#39;请先授权&#39;, sprintf(&#39;<a href="%s">点击登录单点登录系统</a>&#39;, SSOlogin::getInstance()->getAuthUrl()));
  }
  $userInfo = SSOlogin::getInstance()->getInfoFromTicket($ticket);
  if (empty($userInfo[&#39;username&#39;])) {
    return $this->renderAuthError(&#39;请先授权&#39;, sprintf(&#39;<a href="%s">点击登录单点登录系统</a>&#39;, SSOlogin::getInstance()->getAuthUrl()));
  }
  $username = $this->getUserName($userInfo[&#39;username&#39;]);
  $user = User::find()->canLogin()->username($username)->one();
  if (!$user) {
    $newUser = [];
    $newUser[&#39;username&#39;] = $userInfo[&#39;username&#39;];
    $newUser[&#39;email&#39;] = $this->getUserName($userInfo[&#39;username&#39;]);
    $newUser[&#39;role&#39;] = User::ROLE_DEV;
    $newUser[&#39;is_email_verified&#39;] = 1;
    $newUser[&#39;realname&#39;] = $userInfo[&#39;truename&#39;];
    $user = $this->addUser($newUser);
  }
  $isLogin = Yii::$app->user->login($user, 3600 * 24 * 30);
  if ($isLogin) {
    $this->redirect(&#39;/task/index&#39;);
  }
  return true;
}
登入後複製

大概看看這個控制器邏輯就懂了。 SSO 介面扮演的角色就是取得使用者資訊,拿這個使用者資訊跟系統使用者表對比,存在使用者則進行登錄,不存在建立使用者並登入。

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

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

相關推薦:

php_imagick實作復古效果的方法

JS、php關鍵字搜尋函數使用詳解

php mysql 處理時間

以上是php實作的SSO單一登入系統存取功能實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!