Configuration requise pour l'établissement d'un serveur de portail externe (au-dessus d'Omada Controller 2.6.0)

Explications sur le Q&A
Mis à jour 12-19-2018 15:33:15 PM
Ce document concerne les modèles suivants : 

Convient pour Omada Controller V2.6.0 ou supérieur

Si la version de votre contrôleur Omada est inférieure à Omada Controller 2.6.0, veuillez vous reporter à la FAQ 928.

 

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 Omada, le serveur de portail et le serveur d'authentification, ce qui peut vous aider à mieux comprendre les exigences de la création 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 Omada. Le client enverra ensuite une requête GET au contrôleur Omada 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 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 emplacement. L'URL contient également la chaîne de requête. Pour Omada Controller 2.6.0 ou une version ultérieure, 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.

 

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 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)

5. Les informations d'authentification du client sans fil seront soumises au serveur de portail et le serveur de portail 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.

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 est également à vous. Assurez-vous simplement que le serveur de portail sait quand l'authentification est transmise.

 

7. Si l'authentification réussit, le serveur de portail doit envoyer les informations sur le 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 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);

     $ res = curl_exec ($ ch);

     $ resObj = json_decode ($ res);

     // Prévenir CSRF

          if ($ resObj-> success == true) {

                           self :: setCSRFToken ($ resObj-> valeur);

                }

      curl_close ($ ch);

      }

          fonction statique privée setCSRFToken ($ token) {

                     $ myfile = fopen (TOKEN_FILE_PATH, "w") ou die ("Impossible d'ouvrir le fichier!");

                     fwrite ($ monfichier, $ jeton);

                     fclose ($ myfile);

                  

                     renvoyer $ jeton;

                }

(Étape 10)

 

8. Si le serveur de portail a connecté le contrôleur avec succès, il enverra ensuite les informations du client à https: // contrôleur_serveur_contrôleur: https_port / extportal / nom_site / auth? Token = CSRFToken à 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

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

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];

return $ res;

}

fonction statique privée getCSRFToken () {

          $ myfile = fopen (TOKEN_FILE_PATH, "r") ou die ("Impossible d'ouvrir le fichier!");

          $ token = fgets ($ monfichier);

          fclose ($ myfile);

                  

          renvoyer $ jeton;

}

 

(É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.

 

9. Le contrôleur Omada retourne un message JSON : {"succès": [true / false], "message": "informations de retour"} au serveur de portail après que le contrôleur Omada 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 Omada en envoyant une demande POST à https: // contrôleur_serveur_contrôleur: https_port / logout? Token = CSRFToken .

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

$ 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é à partir d'une 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 la demande TPEAP_SESSIONID dans Cookie avec ce cookie ultérieurement.

Newsletter TP-LinkTP-Link prend votre vie privée au sérieux. Pour plus de détails sur la politique de confidentialité de TP-Link, veuillez consultez la page suivante Politique de confidentialité de TP-Link .