Maison  >  Article  >  développement back-end  >  Exemple d'analyse de la fonction d'accès au système d'authentification unique SSO implémentée en PHP

Exemple d'analyse de la fonction d'accès au système d'authentification unique SSO implémentée en PHP

墨辰丷
墨辰丷original
2018-06-01 09:59:021741parcourir

Cet article présente principalement la fonction d'accès au système d'authentification unique SSO implémentée par PHP. Il analyse brièvement les principes de l'accès au système d'authentification unique SSO et les techniques de mise en œuvre liées à PHP. Les amis dans le besoin peuvent s'y référer

Le nom anglais complet de SSO est Single Sign On, single sign-on. Le SSO existe dans plusieurs systèmes d'applications. Les utilisateurs n'ont besoin de se connecter qu'une seule fois pour accéder à tous les systèmes d'applications mutuellement fiables. Il inclut des mécanismes permettant de mapper cette connexion principale aux connexions du même utilisateur dans d'autres applications. C’est l’une des solutions d’intégration commerciale les plus populaires à l’heure actuelle.

Permettez-moi de parler brièvement du principe d'accès au système d'authentification unique SSO. Le principe est que le système lui-même dispose d'une fonction d'authentification complète de l'utilisateur, c'est-à-dire d'une fonction de connexion utilisateur de base, puis. c'est très pratique.

L'interface de demande de connexion SSO est généralement l'interface plus une adresse de rappel. L'accès à cette adresse passera à l'adresse de rappel et apportera un paramètre de ticket. L'utilisation de ce paramètre de ticket, puis la demande à l'interface, peuvent obtenir les informations de l'utilisateur. Si l'utilisateur existe, l'utilisateur sera connecté automatiquement. Si l'utilisateur n'existe pas, l'utilisateur sera ajouté et connecté.

Par exemple, ce modèle SSO implémente deux méthodes, l'une consiste à obtenir l'URL de l'interface et l'autre consiste à obtenir des informations utilisateur basées sur le ticket :

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

Regardons les principales méthodes du contrôleur. Par exemple, l'adresse de rappel consiste à accéder au contrôleur 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;
}

Vous pouvez probablement le comprendre en regardant la logique de ce contrôleur. La fonction de l'interface SSO est d'obtenir des informations utilisateur. Comparez ces informations utilisateur avec la table des utilisateurs du système. Si un utilisateur existe, connectez-vous. S'il n'y a pas d'utilisateur, créez un utilisateur et connectez-vous.

Il s'agit d'un système interne à point unique, intégré au backend. D'autres SSO peuvent être différents de celui-ci, mais les principes et processus de base sont similaires.

Résumé : Ce qui précède représente l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.

Recommandations associées :

phpMéthode de _imagick pour obtenir des effets rétro

JS, phpExplication détaillée de l'utilisation de la fonction de recherche par mot-clé

php+ temps de traitement mysql

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn