溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

php如何實現(xiàn)的SSO單點登錄系統(tǒng)接入功能

發(fā)布時間:2021-06-25 12:27:41 來源:億速云 閱讀:270 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹php如何實現(xiàn)的SSO單點登錄系統(tǒng)接入功能,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

本文實例講述了php實現(xiàn)的SSO單點登錄系統(tǒng)接入功能。分享給大家供大家參考,具體如下:

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

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

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

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

interface SSOLogin
{
  /**
   * 獲取登錄用戶信息
   * @param $ticket
   * @return mixed
   */
  public function getInfoFromTicket($ticket);
  /**
   * 單點登錄授權(quán)地址
   * @return mixed
   */
  public function getAuthUrl();
}

再來看看控制器的主要方法,比如回調(diào)地址是跳轉(zhuǎn)到控制器 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('請先授權(quán)', sprintf('<a href="%s">點擊登錄單點登錄系統(tǒng)</a>', SSOlogin::getInstance()->getAuthUrl()));
  }
  $userInfo = SSOlogin::getInstance()->getInfoFromTicket($ticket);
  if (empty($userInfo['username'])) {
    return $this->renderAuthError('請先授權(quán)', sprintf('<a href="%s">點擊登錄單點登錄系統(tǒng)</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 接口起到的作用就是獲取用戶信息,拿這個用戶信息跟系統(tǒng)用戶表對比,存在用戶則進(jìn)行登錄,不存在創(chuàng)建用戶并登錄。

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

以上是“php如何實現(xiàn)的SSO單點登錄系統(tǒng)接入功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI