Les exigences de l'établissement d'un serveur de portail externe (au-dessus du contrôleur SDN Omada 5.0.15)

Application utilisateur requise
Mis à jour11-05-2024 17:33:29 PM 67847
Ce document concerne les modèles suivants : 

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.

 

https://static.tp-link.com/image-20210301141438-2_1614579303917s.png

 

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

Related FAQs

Est-ce que ce FAQ a été utile ?

Vos commentaires nous aideront à améliorer ce site.

Recommend Products

De United States?

Infos produits, événements, services pour votre pays.