Conditions requises pour l'établissement d'un serveur de portail externe (sous Omada Controller 2.5.4)
Convient pour Omada Controller 2.5.4 ou inférieur.
Pour la version d'Omada Controller au-dessus de 2.6.0 à 3.2.17, veuillez vous référer à FAQ2274
Pour la version d'Omada Controller au-dessus de 4.1.5 à 4.4.6, veuillez vous référer à FAQ2907
Pour la version d'Omada Controller supérieure à 5.0.15 ou supérieure, veuillez vous référer à FAQ3231
Ce document décrit les exigences lors de l'établissement d'un serveur de portail externe. Pour savoir comment configurer External Portal Server , veuillez vous référer à la FAQ-896 (étape 2 de la section 5)
L'image ci-dessous illustre le flux de données entre le client sans fil, le périphérique EAP, le contrôleur EAP, le serveur de portail et le serveur d'authentification, ce qui peut vous aider à mieux comprendre les exigences d'établissement d'un serveur de portail externe.
- Le client sans fil est connecté au SSID sur lequel l'authentification du portail est activée et tente d'accéder à Internet. Le périphérique EAP interceptera la requête HTTP du client, puis la redirigera vers le contrôleur EAP. Le client enverra ensuite la requête GET au contrôleur EAP avec la chaîne de requête "cid=client_mac&ap=ap_mac&ssid=ssid_name&t=time_since_epoch&rid=Radio_id" dans l'URL en fonction de la réponse HTTP qu'il reçoit de l'EAP. (Étape 1 et Étape 2)
- Le contrôleur EAP redirige ensuite le client vers le serveur de portail externe en renvoyant une réponse HTTP avec le code d'état 302 Found au client. La réponse HTTP avec ce code d'état fournira en outre l'URL du serveur de portail externe dans le champ d'emplacement. L'URL contient également la chaîne de requête. Pour le contrôleur EAP 2.2.3 ou supérieur, l'URL est http://portal_server_ip?cid=client_mac&ap=ap_mac&ssid=ssid_name&t=time_since_epoch&rid=Radio_id&site=site_name. (Étape 3 et Étape 4)
La signification des paramètres est indiquée dans le tableau 1 Explication des paramètres.
- Le client enverra une requête GET au serveur de portail externe à l'aide de l'URL mentionnée ci-dessus. (Étape 5)
- Le serveur de portail externe doit être en mesure d'intercepter et de conserver un enregistrement des paramètres dans la chaîne de requête de la demande GET et de renvoyer une page Web avec un formulaire d'authentification au client sans fil. (Étape 6)
- Les informations d'authentification du client sans fil seront soumises au serveur de portail, et le serveur de portail soumettra les informations au serveur d'authentification (étape 7 et étape 8). Cependant, la manière dont le serveur de portail obtient les informations d'authentification du client et la manière dont le serveur de portail communique avec le serveur d'authentification dépendent de votre propre implémentation, ce qui n'entre pas dans le cadre de cet article.
- Le serveur d'authentification vérifie les informations d'authentification et renvoie le résultat au serveur de portail. (Étape 9)
REMARQUE : Dans cet exemple, le serveur de portail et le serveur d'authentification sont séparés. Mais ils peuvent être installés sur le même serveur que vous le souhaitez. La méthode d'authentification dépend également de vous. Assurez-vous simplement que le serveur de portail sait quand l'authentification est réussie.
- Si l'authentification réussit, le serveur de portail doit envoyer les informations client au contrôleur EAP en appelant l'API du contrôleur EAP. Tout d'abord, il doit se connecter au contrôleur EAP en envoyant une requête POST . L' URL de la requête sera https://controller_server_ip:https_port/login et elle contiendra les données "name=the_username_of_controller&password=the_password_of_controller" en utilisant le format JSON dans le corps du message HTTP.
Par exemple,
connexion de fonction statique privée ()
{
$ch = curl_init();
// publier
curl_setopt($ch, CURLOPT_POST, TRUE);
// Définit le retour à une valeur, pas le retour à la page
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Paramétrage des cookies
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIE_FILE_PATH);
curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIE_FILE_PATH);
// Autoriser les certificats auto-signés
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
// Appel d'API
curl_setopt($ch, CURLOPT_URL, CONTROLLER_SERVER . "/login");
curl_setopt($ch, CURLOPT_POSTFIELDS, "name=" . CONTROLLER_USER ."&password=" . CONTROLLER_PASSWORD);
curl_exec($ch);
curl_close($ch);
}
(Étape 10)
- Si le serveur de portail s'est connecté avec succès au contrôleur, il enverra alors les informations du client à https://controller_server_ip :https_port/extportal/site_name/auth en utilisant la méthode POST . Les données d'information peuvent être représentées par JSON farmat et doivent contenir ces paramètres "cid=client_mac&ap=ap_mac&ssid=ssid_name&t=time_since_epoch&rid=Radio_id&site=site_name&time=expire_time".
Par exemple,
fonction statique privée autorise($cid,$ap,$ssid,$rid,$t,$seconds,$site)
{
// Envoie l'utilisateur à autoriser et le temps imparti
$authInfo = tableau(
'cid' => $cid,
'ap' => $ap,
'ssid' => $ssid,
'débarrasser' => $débarrasser,
't' => $t,
'temps' => $secondes
);
$ch = curl_init();
// publier
curl_setopt($ch, CURLOPT_POST, TRUE);
// Définit le retour à une valeur, pas le retour à la page
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Paramétrage des cookies
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIE_FILE_PATH);
curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIE_FILE_PATH);
// Autoriser les certificats auto-signés
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
// Appel d'API
curl_setopt($ch, CURLOPT_URL, CONTROLLER_SERVER ."/extportal/". $site."/auth");
$data = json_encode($authInfo);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($authInfo));
$res = curl_exec($ch);
$resObj = self::resultConvert($res);
if($resObj['succès'] == faux){
echo $res;
}
curl_close($ch);
}
fonction statique privée resultConvert($json)
{
$json = str_replace(array('{','}',':',','),array('[{" ',' }]','":',',"'),$json );
fonction cb_quote($v)
{
return '"'.trim($v[1]).'"' ;
}
$newJSON=preg_replace_callback("~\"(.*?)\"~","cb_quote", $json);
$res = json_decode($newJSON, true)[0] ;
retourne $res ;
}
(Étape 11)
La signification de ces paramètres est la même que dans le tableau 1 Explication des paramètres. Le paramètre de temps ici est le nombre de secondes avant l'expiration de l'authentification du client. Ce paramètre est défini par le serveur de portail.
- Le contrôleur EAP renvoie un message JSON : {"success": [true/false], "message":" return information"} au serveur de portail une fois que le contrôleur EAP a traité les informations fournies dans la requête HTTP POST. La manière dont le serveur de portail traite le message JSON dépend de votre propre implémentation. Enfin, le serveur de portail doit déconnecter le contrôleur EAP en envoyant une requête POST à https://controller_server_ip:https_port/logout .
Par exemple,
déconnexion de la fonction statique privée ()
{
$ch = curl_init();
// Publier
curl_setopt($ch, CURLOPT_POST, TRUE);
// Définit le retour à une valeur, pas le retour à la page
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Paramétrage des cookies
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIE_FILE_PATH);
curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIE_FILE_PATH);
// Autoriser les certificats auto-signés
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
// Appel d'API
curl_setopt($ch, CURLOPT_URL, CONTROLLER_SERVER . "/logout");
curl_exec($ch);
curl_close($ch);
}
- étape 12 et étape 13)
Remarque : Pour appeler l'API avec succès, votre serveur de portail doit être configuré pour atteindre les deux points suivants : 1. autoriser le certificat auto-signé ; 2. lisez le paquet https du serveur, enregistrez le TPEAP_SESSIONID dans le cookie ,demandez avec ce cookie à l'avenir.