L'exemple de cet article décrit la fonction d'accès au système d'authentification unique SSO implémentée par PHP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
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 utilisateur complète, c'est-à-dire une fonction de connexion utilisateur de base, ce qui 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 sur l'utilisateur en fonction du ticket :
interface SSOLogin { /** * 获取登录用户信息 * @param $ticket * @return mixed */ public function getInfoFromTicket($ticket); /** * 单点登录授权地址 * @return mixed */ public function getAuthUrl(); }
Jetons un coup d'œil aux principales méthodes du contrôleur, telles que les rappels L'adresse est de passer 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('请先授权', 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; }
Vous pouvez le comprendre par 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.
J'espère que cet article sera utile à tout le monde dans la programmation PHP.
Pour plus d'articles sur l'analyse d'échantillons de la fonction d'accès au système d'authentification unique SSO implémentée par PHP, veuillez faire attention au site Web chinois de PHP !