Les exigences de l'établissement d'un serveur de portail externe (ci-dessus Omada Controller 4.1.5)
Convient pour Omada Controller 4.1.5 à 4.4.6.
Pour Omada Controller 5.0.15 ou supérieur, veuillez vous référer à la FAQ 3231
Pour Omada Controller 2.6.0 à 3.2.17, veuillez vous référer à la FAQ 2274
Pour Omada Controller 2.5.4 ou inférieur, veuillez vous référer à la FAQ 928
Remarque : Les mots-clés en italique gras indiquent des paramètres automatiquement renseignés par EAP ou Gateway, et doivent être correctement identifiés et fournis par votre serveur de portail externe. La signification des paramètres est indiquée dans la première apparition.
Ce document décrit les exigences pour établir un serveur de portail externe ( portail en abrégé). L'image ci-dessous illustre le flux de données entre les périphériques réseau, ce qui peut aider à mieux comprendre le mécanisme de travail.
Étapes 1 et 2.
Lorsqu'un client est connecté au réseau sans fil ou câblé lié avec un portail activé et tente d'accéder à Internet, sa requête HTTP sera interceptée par EAP ou Gateway, respectivement, puis redirigée vers le contrôleur Omada SDN (contrôleur en abrégé) le long avec les informations de connexion renseignées automatiquement par EAP ou Gateway dans l'URL.
Étapes 3 et 4.
Après cela, le client enverra une requête HTTP GET avec les informations de connexion au contrôleur et sera redirigé vers le portail par la réponse du contrôleur avec une réponse HTTP avec le code d'état 302. La réponse HTTP inclut l'URL du portail dans le champ d'emplacement ainsi que la connexion. information.
URL pour EAP : http(s):// PORTAL ?clientMac= CLIENT_MAC &apMac= AP_MAC &ssidName= SSID_NAME &t= TIME_SINCE_EPOCH &radioId= RADIO_ID &site= SITE_NAME &redirectUrl= LANDING_PAGE .
URL de la passerelle : http(s):// PORTAL ?clientMac= CLIENT_MAC &gatewayMac= GATEWAY_MAC &vid= VLAN_ID &t= TIME_SINCE_EPOCH &site= SITE_NAME &redirectUrl= LANDING_PAGE .
PORTAIL |
L'adresse IP ou l'URL et le numéro de port (si nécessaire) du serveur de portail externe. |
|
clientMac |
CLIENT_MAC |
Adresse MAC du client. |
apMac |
AP_MAC |
Adresse MAC de l'EAP auquel le client est connecté. |
passerelleMac |
GATEWAY_MAC |
Adresse MAC de la passerelle. |
vidéo |
VLAN_ID |
ID VLAN du réseau câblé auquel le client est connecté. |
ssidName |
SSID_NAME |
Nom du SSID auquel le client est connecté |
identifiant radio |
RADIO_ID |
ID radio de la bande à laquelle le client est connecté, où 0 représente 2,4G et 1 représente 5G. |
placer |
NOM DU SITE |
Nom du site. |
URL de redirection |
LANDING_PAGE |
URL à visiter après une authentification réussie, qui peut être définie dans la page de destination. |
t |
TIME_SINCE_EPOCH |
L'unité ici est la microseconde. |
Étapes 5 et 6.
Le client enverra une requête HTTP GET au portail avec l'URL ci-dessus. Le portail doit être en mesure de reconnaître et de conserver les informations de connexion dans la chaîne de requête de la requête HTTP GET et de renvoyer la page Web pour authentification.
Étapes 7, 8 et 9.
Le client soumettra les informations d'authentification au portail, qui seront transmises au serveur d'authentification et seront vérifiées. Ensuite, le serveur d'authentification renvoie le résultat de l'authentification au portail.
Vous pouvez décider comment Portal obtient les informations d'authentification du client et comment Portal communique avec le serveur d'authentification, selon vos propres exigences, ce qui dépasse le cadre de cet article.
REMARQUE : Dans la figure ci-dessus, le portail et le serveur d'authentification sont séparés. Vous pouvez les installer sur le même serveur que vous le souhaitez. La méthode d'authentification dépend également de vous. Assurez-vous simplement que Portal peut connaître le résultat de l'authentification à partir du serveur d'authentification.
Étapes 10 et 11.
Si la demande d'authentification est autorisée, le portail doit envoyer les informations du client au contrôleur en appelant son API.
Tout d'abord, il doit se connecter au Controller en envoyant une requête HTTP POST . L'URL de la requête doit être https:// CONTROLLER : PORT /api/v2/hotspot/login et doit contenir les informations du compte de l'opérateur au format JSON dans le corps du message HTTP : "name= OPERATOR_USERNAME &password= OPERATOR_PASSWORD " .
L'interface d'appel est POST /api/v2/hotspot/login. Le paramètre de passage est JSON : {“name”:”xxx”, “password”:”xxx”}. Notez que le compte et le mot de passe ici sont l'opérateur ajouté dans l'interface du gestionnaire de points d'accès, plutôt que le compte et le mot de passe du compte du contrôleur.
MANETTE |
Adresse IP ou URL du contrôleur Omada SDN. |
PORT |
Port HTTPS pour la gestion du contrôleur du contrôleur Omada SDN (8043 pour le logiciel et 433 pour OC par défaut, accédez à Paramètres --- Contrôleur --- Access Config pour modification). |
OPERATOR_USERNAME |
Nom d'utilisateur de l'opérateur du point d'accès. |
OPERATOR_PASSWORD |
Mot de passe de l'opérateur du hotspot. |
Modèle de code PHP :
connexion de fonction statique privée ()
{
$ch = curl_init();
// poste
curl_setopt($ch, CURLOPT_POST, TRUE);
// Définit le retour à une valeur, pas le retour à la page
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Configurer les cookies. COOKIE_FILE_PATH définit où enregistrer le cookie.
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.":".PORT."/api/v2/hotspot/login” );
curl_setopt($ch, CURLOPT_POSTFIELDS, "name=" . OPERATOR_USER ."&password=" . OPERATOR_PASSWORD);
$res = curl_exec($ch);
$resObj = json_decode($res);
// Empêche CSRF. TOKEN_FILE_PATH définit où enregistrer le jeton.
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 ;
}
Si l'authentification de connexion réussit, le contrôleur répondra avec le JSON suivant dans le corps HTTP.
{
"code d'erreur": 0,
"msg": "Connexion hotspot réussie.",
"résultat": {
"jeton": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
Étapes 12 et 13.
Après une connexion réussie, Portal peut envoyer le résultat de l'authentification du client à https:// CONTROLLER : PORT /api/v2/hotspot/extPortal/auth?token=CSRFToken avec la méthode HTTP POST . Les informations client doivent être encapsulées au format JSON et doivent contenir les paramètres suivants.
Pour EAP : " clientMac= CLIENT_MAC &apMac= AP_MAC &ssidName= SSID_NAME &radioId= RADIO_ID &site= SITE_NAME &time= EXPIRE_TIME & authType =4 "
Pour Gateway : " clientMac= CLIENT_MAC &gatewayMac= GATEWAY_MA C&vid= VLAN_ID &site= SITE_NAME &time= EXPIRE_TIM E& authType =4 "
temps |
DATE D'EXPIRATION |
Délai d'expiration de l'authentification. L'unité ici est la microseconde. |
Modèle de code PHP pour EAP :
fonction statique privée autorise($clientMac,$apMac,$ssidName,$radioId,$ millisecondes,$site)
{
// Envoie l'utilisateur à autoriser et le temps imparti
$authInfo = tableau(
'clientMac' => $clientMac,
'apMac' => $apMac,
''ssidName => $ssidName,
'radioId ' => $radioId,
'time' => $millisecondes,
'authType' => 4
);
$ch = curl_init();
// poste
curl_setopt($ch, CURLOPT_POST, TRUE);
// Définit le retour à une valeur, pas le retour à 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 d'API
$csrfToken = self::getCSRFToken();
curl_setopt($ch, CURLOPT_URL, CONTROLLER.":". PORT."/api/v2/hotspot/extPortal/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 ;
}
Si la demande d'authentification est acceptée, le Controller répondra avec le JSON suivant :
{ "code d'erreur": 0 }
Remarque : Le portail doit pouvoir répondre aux deux exigences suivantes :
1. Autoriser le certificat auto-signé . Ou vous téléchargerez votre propre certificat HTTPS sur Controller.
2. Lisez et enregistrez le « TPEAP_SESSIONID » dans Cookie et envoyez une demande d'authentification avec le cookie.