Configuration requise pour l'établissement d'un serveur de portail externe (au-dessus d'Omada Controller 2.6.0)
Convient pour Omada Controller 2.6.0 à 3.2.17.
Pour Omada Controller ci-dessous 2.5.4 ou ci-dessous, veuillez vous référer à FAQ928
Pour Omada Controller 4.1.5 à 4.4.6, veuillez vous référer à FAQ2907
Pour Omada Controller 5.0.15 ou supérieur, 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, l'appareil EAP, le contrôleur Omada, 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.
1. 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 Omada. Le client enverra ensuite la requête GET au contrôleur Omada 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)
2. Le contrôleur Omada redirige ensuite le client vers le serveur de portail externe en répondant 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 Omada Controller 2.6.0 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.
3. Le client enverra une requête GET au serveur de portail externe en utilisant l'URL mentionnée ci-dessus. (Étape 5)
4. 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)
5. 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.
6. 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.
7. Si l'authentification réussit, le serveur de portail doit envoyer les informations client au contrôleur Omada en appelant l'API du contrôleur Omada. Tout d'abord, il doit se connecter au contrôleur Omada 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);
$res = curl_exec($ch);
$resObj = json_decode($res);
// Empêcher le CSRF
if($resObj->succès == vrai){
self ::setCSRFToken($resObj->value);
}
curl_close($ch);
}
fonction statique privée setCSRFToken($token){
$myfile = fopen(TOKEN_FILE_PATH, "w") or die("Impossible d'ouvrir le fichier !");
fwrite($monfichier, $jeton);
fclose($monfichier);
retourne $token ;
}
(Étape 10)
8. Si le serveur de portail s'est connecté avec succès au contrôleur, il enverra alors les informations client à https://controller_server_ip:https_port/extportal/site_name/auth?token=CSRFToken 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
$csrfToken = self::getCSRFToken();
curl_setopt($ch, CURLOPT_URL, CONTROLLER_SERVER ."/extportal/". $site."/auth"."?token=".$csrfToken);
$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 ;
}
fonction statique privée getCSRFToken(){
$myfile = fopen(TOKEN_FILE_PATH, "r") or die("Impossible d'ouvrir le fichier !");
$token = fgets($monfichier);
fclose($monfichier);
retourne $token ;
}
(É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.
9. Le contrôleur Omada renvoie un message JSON : {"success": [true/false], "message":" return information"} au serveur de portail une fois que le contrôleur Omada 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 Omada en envoyant une requête POST à https://controller_server_ip:https_port/logout?token=CSRFToken .
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
$csrfToken = self::getCSRFToken();
curl_setopt($ch, CURLOPT_URL, CONTROLLER_SERVER . "/logout"."?token=".$csrfToken);
curl_exec($ch);
curl_close($ch);
}
(Étape 12 et Étape 13)
TOKEN_FILE_PATH est un fichier qui enregistre le CSRFToken renvoyé par la demande de connexion, les clients peuvent le configurer eux-mêmes.
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 Cookie ,demandez avec ce cookie à l'avenir.