Ejemplo de código y API para servidor de portal externo (Omada Controller 5.0.15 o superior)

Knowledgebase
Configuration Guide
Portal
API
09-20-2024
178

Adecuado para Omada Controller 5.0.15 o superior.

Para el controlador Omada 4.1.5 a 4.4.6, consulte la pregunta frecuente 2907

Para Omada Controller 2.6.0 a 3.2.17, consulte la pregunta frecuente 2274

 

En comparación con Omada SDN Controller v4, los principales cambios son los siguientes:

1. Agregue la ID del controlador a la URL para iniciar sesión en el punto de acceso y enviar la información del cliente.

2. Agregue el encabezado HTTP, que lleva el token CSRF.

 

Nota: Las palabras clave en cursiva y negrita indican parámetros que EAP o Gateway completan automáticamente, y su servidor de portal externo debe identificarlos y entregarlos correctamente. Los significados de los parámetros se indican en la primera aparición.

 

Este documento describe los requisitos para establecer un servidor de portal externo ( Portal para abreviar). La siguiente imagen muestra el flujo de datos entre los dispositivos de red, lo que puede ayudar a comprender mejor el mecanismo de trabajo.

Pasos 1 y 2.

Cuando un cliente está conectado a la red inalámbrica o cableada con un Portal habilitado e intenta acceder a Internet, su solicitud HTTP será interceptada por EAP o Gateway, respectivamente, y luego redirigida al Controlador SDN de Omada (Controlador para abreviar) junto con con la información de conexión que es rellenada automáticamente por EAP o Gateway en la URL.

 

Pasos 3 y 4.

Después de eso, el cliente enviará una solicitud HTTP GET con la información de conexión al Controlador y será redirigido al Portal por la respuesta del Controlador con una respuesta HTTP con el código de estado 302. La respuesta HTTP incluye la URL del Portal en el campo de ubicación, así como la conexión. información.

URL para 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 para puerta de enlace:

http(s)://PORTAL?clientMac=CLIENT_MAC&gatewayMac=GATEWAY_MAC&vid=VLAN_ID&t=TIME_SINCE_EPOCH&site=SITE_NAME&redirectUrl=LANDING_PAGE.

 

PORTAL

La dirección IP o URL y el número de puerto (si es necesario) del servidor de portal externo.

clientMac

CLIENT_MAC

Dirección MAC del cliente.

apMac

AP_MAC

Dirección MAC del EAP al que está conectado el cliente.

gatewayMac

GATEWAY_MAC

Dirección MAC de la puerta de enlace.

vid

VLAN_ID

ID de VLAN de la red cableada a la que está conectado el cliente.

ssidName

SSID_NAME

Nombre del SSID al que está conectado el cliente

radioId

RADIO_ID

Radio ID de la banda a la que está conectado el cliente, donde 0 representa 2.4G y 1 representa 5G.

site

SITE_NAME

Nombre del sitio.

redirectUrl

LANDING_PAGE

URL para visitar después de una autenticación exitosa, que se puede configurar en la página de destino.

t

TIME_SINCE_EPOCH

La unidad aquí es microsegundo.

 

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

 

Pasos 5 y 6.

El cliente enviará una solicitud HTTP GET al Portal con la URL anterior. El portal debe poder reconocer y mantener la información de conexión en la cadena de consulta de la solicitud HTTP GET y devolver la página web para la autenticación.

 

Pasos 7, 8 y 9.

El cliente enviará información de autenticación al Portal, que se entregará al servidor de autenticación y se verificará. Luego, el servidor de autenticación devuelve el resultado de la autenticación a Portal.

Puede decidir cómo Portal obtiene la información de autenticación del cliente y cómo Portal se comunica con el servidor de autenticación, de acuerdo con sus propios requisitos, lo cual está más allá del alcance de este artículo.

 

NOTA: En la figura anterior, el Portal y el servidor de autenticación están separados. Puede instalarlos en el mismo servidor que desee. El método de autenticación también depende de usted. Solo asegúrese de que Portal pueda conocer el resultado de la autenticación del servidor de autenticación.

 

Pasos 10 y 11.

Si se autoriza la solicitud de autenticación, el Portal debe enviar la información del cliente al Controlador llamando a su API.

Primero, debe iniciar sesión en Controller mediante el envío de una solicitud HTTP POST . La URL de la solicitud debe ser https://CONTROLLER:PORT/CONTROLLER_ID/api/v2/hotspot/login y debe incluir la información de la cuenta del operador en formato JSON en el cuerpo del mensaje HTTP: {"name": "OPERATOR_USERNAME","password": "OPERATOR_PASSWORD"}.

Tenga en cuenta que la cuenta y la contraseña aquí son el operador agregado en la interfaz del administrador del punto de acceso, en lugar de la cuenta y la contraseña de la cuenta del controlador.

 

CONTROLLER

Dirección IP o URL del controlador Omada SDN.

PORT

Puerto HTTPS para la gestión del controlador de Omada SDN Controller (8043 para software y 433 para OC de forma predeterminada, vaya a Configuración --- Controlador --- Configuración de acceso para modificar).

CONTROLLER_ID

Identificador del Controlador SDN de Omada. Cuando acceda al controlador, el identificador se agregará automáticamente a la URL, de donde obtendrá el identificador.

Por ejemplo, si la URL de su controlador es https://localhost:8043/abcdefghijklmnopqrstuvwxyzabcdef/, entonces CONTROLLER_ID es abcdefghijklmnopqrstuvwxyzabcdef.

OPERATOR_USERNAME

Nombre de usuario del operador del punto de acceso.

OPERATOR_PASSWORD

Contraseña del operador del punto de acceso.

 

 

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/login");

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"

}

}

Pasos 12 y 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"}

 

tiempo

EXPIRE_TIME

Hora de caducidad de la autenticación. La unidad aquí es microsegundo.

 

Plantilla de código PHP para EAP:

 

public static function authorize($clientMac, $apMac, $ssidName, $radioId, $milliseconds)

{

// Send user to authorize and the time allowed

$authInfo = array(

'clientMac' => $clientMac,

'apMac' => $apMac,

'ssidName' => $ssidName,

'radioId' => $radioId,

'time' => $milliseconds,

'authType' => 4

);

$csrfToken = self::getCSRFToken();

$headers = array(

'Content-Type: application/json',

'Accept: application/json',

'Csrf-Token: ' . $csrfToken

);

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

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/login");

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($authInfo));

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$res = curl_exec($ch);

echo $res;

$resObj = json_decode($res);

if ($resObj->errorCode == 0) {

// authorized successfully

}

curl_close($ch);

}

 

public static function getCSRFToken()

{

$myfile = fopen(TOKEN_FILE_PATH, "r") or die("Unable to open file!");

$token = fgets($myfile);

fclose($myfile);

return $token;

}

If the authentication request is accepted, the Controller will reply with the following JSON:

{

"errorCode": 0

}

 

Nota : el portal debe poder cumplir los dos requisitos siguientes:

1. Allow self-signed certificateo . O subirá su propio certificado HTTPS a Controller.

2. Lea y guarde el “ TPEAP_SESSIONIDen Cookie y envíe una solicitud de autenticación con la Cookie.

 

Evalúa este documento

Documentos relacionados