Heim >php教程 >PHP开发 >Beispielanalyse der in PHP implementierten SSO-Single-Sign-On-Systemzugriffsfunktion

Beispielanalyse der in PHP implementierten SSO-Single-Sign-On-Systemzugriffsfunktion

高洛峰
高洛峰Original
2016-12-28 16:07:012405Durchsuche

Das Beispiel in diesem Artikel beschreibt die von PHP implementierte SSO-Single-Sign-On-Systemzugriffsfunktion. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Der vollständige englische Name von SSO lautet Single Sign On, Single Sign-On. SSO erfolgt in mehreren Anwendungssystemen. Benutzer müssen sich nur einmal anmelden, um auf alle gegenseitig vertrauenswürdigen Anwendungssysteme zuzugreifen. Es umfasst Mechanismen, die diese primäre Anmeldung den Anmeldungen desselben Benutzers in anderen Anwendungen zuordnen können. Es ist derzeit eine der beliebtesten Unternehmensintegrationslösungen.

Lassen Sie mich kurz auf das Prinzip des Zugriffs auf das SSO-Single-Sign-On-System eingehen. Die Voraussetzung ist, dass das System selbst über eine vollständige Benutzerauthentifizierungsfunktion verfügt, dh eine grundlegende Benutzeranmeldefunktion, was sehr praktisch ist .

Die SSO-Anmeldeanforderungsschnittstelle ist normalerweise die Schnittstelle plus eine Rückrufadresse. Wenn Sie auf diese Adresse zugreifen, wird ein Ticketparameter verwendet und Sie können dann die Benutzerinformationen anfordern. Wenn der Benutzer vorhanden ist, wird er automatisch angemeldet. Wenn der Benutzer nicht vorhanden ist, wird er hinzugefügt und angemeldet.

Dieses SSO-Modell implementiert beispielsweise zwei Methoden: Eine besteht darin, die Schnittstellen-URL abzurufen, und die andere darin, Benutzerinformationen basierend auf dem Ticket abzurufen:

interface SSOLogin
{
  /**
   * 获取登录用户信息
   * @param $ticket
   * @return mixed
   */
  public function getInfoFromTicket($ticket);
  /**
   * 单点登录授权地址
   * @return mixed
   */
  public function getAuthUrl();
}

Lassen Sie uns einen Blick darauf werfen Bei den Hauptmethoden des Controllers, z. B. Rückrufen, ist die Adresse, zum Controller zu springen 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;
}

Sie können es verstehen Schauen Sie sich die Logik dieses Controllers an. Die Funktion der SSO-Schnittstelle besteht darin, Benutzerinformationen mit der Systembenutzertabelle abzurufen. Wenn ein Benutzer vorhanden ist, melden Sie sich an. Wenn kein Benutzer vorhanden ist, erstellen Sie einen Benutzer und melden Sie sich an.

Dies ist ein internes Single-Point-System, das in das Backend integriert ist. Andere SSOs unterscheiden sich möglicherweise davon, aber die Grundprinzipien und Prozesse sind ähnlich.

Ich hoffe, dass dieser Artikel für alle hilfreich ist, die sich mit PHP-Programmierung befassen.

Weitere verwandte Artikel zur Beispielanalyse der von PHP implementierten SSO-Single-Sign-On-Systemzugriffsfunktion finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn