Les exigences de l'établissement d'un serveur de portail externe (au-dessus du contrôleur SDN Omada 5.0.15)
Convient au contrôleur Omada 5.0.15 ou supérieur.
Pour Omada Controller 4.1.5 à 4.4.6, veuillez vous référer à la FAQ 2907
Pour Omada Controller 2.6.0 à 3.2.17, veuillez vous référer à la FAQ 2274
Par rapport à Omada SDN Controller v4, les principaux changements sont les suivants :
1. Ajoutez l’ID du contrôleur à l’URL pour la connexion au point d’accès et la soumission des informations client.
2. Ajoutez l’en-tête HTTP, qui contient le jeton CSRF.
Remarque : les mots-clés en italique gras indiquent les paramètres qui sont automatiquement renseignés par EAP ou Gateway et qui doivent être correctement identifiés et transmis par votre serveur de portail externe. La signification des paramètres est indiquée lors de 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 fonctionnement.
Étapes 1 et 2.
Lorsqu'un client est connecté au réseau sans fil ou filaire lié à 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 SDN Omada ( Controller en abrégé) 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 les informations de connexion.
URL pour EAP :
http(s):// PORTAIL? clientMac= CLIENT_MAC &apMac= AP_MAC &ssidName= NOM_SSID &t= TEMPS_DEPUIS_L'ÉPOQUE &radioId= ID_RADIO &site= NOM_SITE &redirectUrl= PAGE_D'ACCUEIL .
URL de la passerelle :
http(s):// PORTAIL? clientMac= CLIENT_MAC &gatewayMac= PASSERELLE_MAC &vid= VLAN_ID &t= TEMPS_DEPUIS_L'ÉPOQUE &site= NOM_SITE &redirectUrl= PAGE_D'ACCUEIL .
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 |
PASSERELLE_MAC |
Adresse MAC de la passerelle. |
à |
ID_VLAN |
ID VLAN du réseau filaire auquel le client est connecté. |
Nom ssid |
SSID_NOM |
Nom du SSID auquel le client est connecté |
identifiant radio |
ID_RADIO |
ID radio de la bande à laquelle le client est connecté, où 0 représente 2,4G et 1 représente 5G. |
site |
NOM_SITE |
Nom du site. |
URL de redirection |
PAGE D'ACCUEIL |
URL à visiter après une authentification réussie, qui peut être définie dans la page de destination. |
t |
TEMPS_DEPUIS_ÉPOQUE |
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 capable 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 l'authentification.
Étapes 7, 8 et 9.
The client will submit authentication information to Portal, which will be delivered to the authentication server, and be verified. Then the authentication server returns the authentication result to Portal.
You can decide how Portal obtains the client's authentication information and how Portal communicates with the authentication server, according to your own requirements, which is beyond the scope of this article.
NOTE: In the figure above, the Portal and authentication server are separated. You can install them on the same server as you wish. The authentication method is also up to you. Just make sure Portal can know the authentication result from the authentication server.
Steps 10 and 11.
If the authentication request is authorized, Portal should send the client information to the Controller by calling its API.
First, it must log in Controller by sending an HTTP POST request. The request’s URL should be https://CONTROLLER:PORT/CONTROLLER_ID/api/v2/hotspot/login and it should carry the operator account information in JSON format in the HTTP message body: {"name": "OPERATOR_USERNAME","password": "OPERATOR_PASSWORD"}.
Note that the account and password here are the operator added in the hotspot manager interface, rather than the account and password for the controller account.
CONTROLLER |
IP address or URL of Omada SDN Controller. |
PORT |
HTTPS Port for Controller Management of Omada SDN Controller (8043 for software, and 433 for OC by default, go to Settings --- Controller --- Access Config for modification). |
CONTROLLER_ID |
Identifier of the Omada SDN Controller. When you access the controller, the identifier will be automatically added to the URL, from which you will get the identifier. For example, if your controller URL is https://localhost:8043/abcdefghijklmnopqrstuvwxyzabcdef/, then the CONTROLLER_ID is abcdefghijklmnopqrstuvwxyzabcdef. |
OPERATOR_USERNAME |
Username of the hotspot operator. |
OPERATOR_PASSWORD |
Password of the hotspot operator. |
PHP Code Template:
public static function login()
{
$loginInfo = array(
"name" => OPERATOR_USER,
"password" => OPERATOR_PASSWORD
);
$headers = array(
"Content-Type: application/json",
"Accept: application/json"
);
$ch = curl_init();
// post
curl_setopt($ch, CURLOPT_POST, TRUE);
// Set return to a value, not return to page
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Set up cookies. COOKIE_FILE_PATH defines where to save Cookie.
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIE_FILE_PATH);
curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIE_FILE_PATH);
// Allow Self Signed Certs
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
// API Call
curl_setopt($ch, CURLOPT_URL, "https://" . CONTROLLER . ":" . PORT . "/" . CONTROLLER_ID . "/api/v2/hotspot/extPortal/auth");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($loginInfo));
$res = curl_exec($ch);
$resObj = json_decode($res);
//Prevent CSRF. TOKEN_FILE_PATH defines where to save Token.
if ($resObj->errorCode == 0) {
// login successfully
self::setCSRFToken($resObj->result->token);
}
curl_close($ch);
}
private static function setCSRFToken($token)
{
$myfile = fopen(TOKEN_FILE_PATH, "w") or die("Unable to open file!");
fwrite($myfile, $token);
fclose($myfile);
return $token;
}
If the login authentication passes, the Controller will reply with the following JSON in the HTTP body. Note that the token inside result is the CSRF-Token, which should be added to the HTTP Header of the following steps.
{
"errorCode": 0,
"msg": "Hotspot log in successfully.",
"result": {
"token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
Steps 12 and 13.
After successful login, Portal can send the client authentication result to https://CONTROLLER:PORT/CONTROLLER_ID/api/v2/hotspot/extPortal/auth with HTTP POST method.
The client information should be encapsulated in JSON format in the HTTP message body, and must contain the following parameters.
For EAP: {"clientMac":"CLIENT_MAC","apMac":"AP_MAC","ssidName":"SSID_NAME","radioId":"RADIO_ID","site":"SITE_NAME","time":"EXPIRE_TIME","authType":"4"}
For Gateway:
{" clientMac ":" CLIENT_MAC "," gatewayMac ":" GATEWAY_MAC "," vid ":" VLAN_ID "," site ":" SITE_NAME "," time ":" EXPIRE_TIME "," authType ":" 4 "}
temps |
EXPIRE_TIME |
Délai d'expiration de l'authentification. L'unité ici est la microseconde. |
Modèle de code PHP pour EAP :
fonction statique publique autoriser ($clientMac, $apMac, $ssidName, $radioId, $milliseconds)
{
// Envoyer l'utilisateur à autoriser et le temps autorisé
$authInfo = tableau(
'clientMac' => $clientMac,
'apMac' => $apMac,
'ssidName' => $ssidName,
'radioId' => $radioId,
'time' => $millisecondes,
'authType' => 4
);
$csrfToken = self::getCSRFToken();
$en-têtes = tableau(
'Type de contenu : application/json',
'Accepter : application/json',
« Jeton Csrf : ». $csrfToken
);
$ch = curl_init();
// poste
curl_setopt($ch, CURLOPT_POST, TRUE);
// Définir le retour à une valeur, pas le retour à la page
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Configurer les cookies.
curl_setopt($ch, CURLOPT_COOKIEJAR, CHEMIN_FICHIER_COOKIE);
curl_setopt($ch, CURLOPT_COOKIEFILE, CHEMIN_FICHIER_COOKIE);
// Autoriser les certificats auto-signés
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FAUX);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FAUX);
// Appel d'API
curl_setopt($ch, CURLOPT_URL, "https://" . CONTROLLER . ":" . PORT . "/" . CONTROLLER_ID . "/api/v2/hotspot/login");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($authInfo));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$res = curl_exec($ch);
écho $res;
$resObj = json_decode($res);
si ($resObj->errorCode == 0) {
// autorisé avec succès
}
curl_close($ch);
}
fonction statique publique getCSRFToken()
{
$myfile = fopen(TOKEN_FILE_PATH, "r") ou die("Impossible d'ouvrir le fichier !");
$token = fgets($monfichier);
fclose($monfichier);
retourner $token;
}
Si la demande d'authentification est acceptée, le contrôleur répondra avec le JSON suivant :
{
"code d'erreur": 0
}
Remarque : le portail doit pouvoir répondre aux deux exigences suivantes :
1. Autorisez les certificats auto-signés . Ou vous téléchargerez votre propre certificat HTTPS sur Controller.
2. Lisez et enregistrez le « TPEAP_SESSIONID » dans le Cookie et envoyez une demande d'authentification avec le Cookie.
* Pour Controller v5.11 et supérieur, le nom du cookie est « TPOMADA_SESSIONID » .