Conditions requises pour l'établissement d'un serveur de portail externe (sous Omada Controller 2.5.4)

Application utilisateur requise
Mis à jour 01-03-2019 09:33:15 AM
Ce document concerne les modèles suivants : 

Convient pour Omada Controller V2.5.4 ou inférieur

Si la version de votre contrôleur Omada est supérieure à celle du contrôleur Omada 2.5.4, veuillez vous reporter à la FAQ 2274.

Ce document décrit la configuration requise pour établir un serveur de portail externe. Pour savoir comment configurer External Portal Server , veuillez vous reporter à 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 relatives à l'é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 intercepte la requête HTTP du client, puis la redirige vers le contrôleur EAP. Le client envoie ensuite la demande GET au contrôleur EAP avec la chaîne de requête «cid = client_mac & ap = ap_mac & ssid = nom_sid & t = time_since_epoch & rid = Radio_id» dans l'URL en fonction de la réponse HTTP reçue par EAP. (Étape 1 et étape 2)
  2. Le contrôleur EAP 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 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 = nom_sid & t = heure_since_epoch & rid = Radio_id & site = nom_site. (Étape 3 et étape 4)

La signification des paramètres est indiquée dans le Tableau 1 Explication des paramètres.

  1. Le client enverra une requête GET au serveur de portail externe en utilisant l'URL mentionnée ci-dessus (étape 5).
  2. Le serveur de portail externe doit pouvoir intercepter et conserver un enregistrement des paramètres dans la chaîne de requête de la demande GET et renvoyer une page Web avec un formulaire d'authentification au client sans fil. (Étape 6)
  3. Les informations d'authentification du client sans fil seront soumises au serveur de portail, qui les soumettra au serveur d'authentification (étapes 7 et 8). Toutefois, la façon dont le serveur de portail obtient les informations d'authentification du client et la façon dont le serveur de portail communique avec le serveur d'authentification dépendent de votre propre implémentation, ce qui sort du cadre de cet article.
  4. 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 est également à vous. Assurez-vous simplement que le serveur de portail sait quand l'authentification est transmise.

 

  1. 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 demande POST . L' URL de la demande sera https: // contrôleur_serveur_ip: https_port / login et portera les données «nom = nom_utilisateur_du_controller et mot de passe = mot_de_passe_du_controlleur» utilisant le format JSON dans le corps du message HTTP.

Par exemple,

connexion à une fonction statique privée ()

{       

$ ch = curl_init ();

// post

curl_setopt ($ ch, CURLOPT_POST, TRUE);

// Définit le retour à une valeur, pas la page

curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1);

// Configurer les 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 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)

  1. Si le serveur de portail a connecté le contrôleur avec succès, il envoie ensuite les informations sur le client à https: // contrôleur _serveur_ip: https_port / extportal / nom_site / auth à l' aide de 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 = nom_sid & t = time_since_epoch & rid = radio_id & site = nom_site & time = expire_time».

Par exemple,

fonction statique privée authorize ($ cid, $ ap, $ ssid, $ rid, $ t, $ secondes, $ site)

{

     // Envoyer l'utilisateur à autoriser et le temps imparti

$ authInfo = array (

'cid' => $ cid,

'ap' => $ ap,

'ssid' => $ ssid,

'débarrasser' => $ débarrasser,

't' => $ t,

'temps' => $ secondes

);

$ ch = curl_init ();

// post

curl_setopt ($ ch, CURLOPT_POST, TRUE);

// Définit le retour à une valeur, pas la page

curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1);

// Configurer les 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 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 ['success'] == false) {

echo $ res;

  •  

}

curl_close ($ ch);

}

 

fonction statique privée resultConvert ($ json)

{       

$ json = str_replace (tableau ('{', '}', ':', ',', '), tableau (' [{"','}] ','": ',', "', $ json )

fonction cb_quote ($ v)

{

return '"' .trim ($ v [1]). '"';

}

$ newJSON = preg_replace_callback ("~ \" (. *?) \ "~", "cb_quote", $ json);

$ res = json_decode ($ newJSON, true) [0];

return $ 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 heure 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.

  1. Le contrôleur EAP renvoie un message JSON : {"success": [true / false], "message": "informations de retour"} au serveur de portail après que le contrôleur EAP a traité les informations fournies dans la demande 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 demande POST à https: // contrôleur_serveur_client: https_port / logout .

Par exemple,

fonction statique privée logout ()

{     

$ ch = curl_init ();

// publier

curl_setopt ($ ch, CURLOPT_POST, TRUE);

// Définit le retour à une valeur, pas la page

curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1);

// Configurer les 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 API

curl_setopt ($ ch, CURLOPT_URL, CONTROLLER_SERVER. "/ logout");

      curl_exec ($ ch);

curl_close ($ ch);

}

  1. é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 la demande TPEAP_SESSIONID dans Cookie avec ce cookie à l'avenir.