Ejemplo de código y API para servidor de portal externo (controlador Omada 4.1.5 a 4.4.6)

Requisito de la aplicación de usuario
Actualizado05-30-2024 09:32:32 AM 73861
Este artículo se aplica a: 

Adecuado para controlador Omada 4.1.5 a 4.4.6.

Para Omada Controller 5.0.15 o superior, consulte la pregunta frecuente 3231

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

Para Omada Controller 2.5.4 o inferior, consulte la pregunta frecuente 928

 

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 Gateway: 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.

 

 

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/api/v2/hotspot/login y debe llevar la información de la cuenta del operador en formato JSON en el cuerpo del mensaje HTTP: “name=OPERATOR_USERNAME&password=OPERATOR_PASSWORD .

La interfaz de llamada es POST /api/v2/hotspot/login. El parámetro de paso es JSON: {“name”:”xxx”, “password”:”xxx”}. 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.

CONTROLADOR

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

OPERATOR_USERNAME

Nombre de usuario del operador del punto de acceso.

OPERATOR_PASSWORD

Contraseña del operador del punto de acceso.

 

Plantilla de código PHP:

private static function login()

{

$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, 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);

//Prevent CSRF. TOKEN_FILE_PATH defines where to save Token.

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

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

}

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.

{

"errorCode": 0,

"msg": "Hotspot log in successfully.",

"result": {

"token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

}

}

Pasos 12 y 13.

Después de un inicio de sesión exitoso, el Portal puede enviar el resultado de la autenticación del cliente a https://CONTROLLER:PORT/api/v2/hotspot/extPortal/auth?token=CSRFToken con el método HTTP POST . La información del cliente debe estar encapsulada en formato JSON y debe contener los siguientes parámetros.

Para EAP:“clientMac=CLIENT_MAC&apMac=AP_MAC&ssidName=SSID_NAME &radioId=RADIO_ID&site=SITE_NAME&time=EXPIRE_TIME&authType =4

Para 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:

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

{

// Send user to authorize and the time allowed

$authInfo = array(

'clientMac' => $clientMac,

'apMac' => $apMac,

''ssidName => $ssidName,

'radioId ' => $radioId,

'time' => $milliseconds,

‘authType’ => 4

);

$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

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

echo $res;

}

curl_close($ch);

}

private static function resultConvert($json)

{

$json = str_replace(array('{','}',':',','),array('[{" ',' }]','":',',"'),$json);

function cb_quote($v)

{

return '"'.trim($v[1]).'"';

}

$newJSON=preg_replace_callback("~\"(.*?)\"~","cb_quote", $json);

$res = json_decode($newJSON, true)[0];

return $res;

}

private 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. Permitir certificado autofirmado . O subirá su propio certificado HTTPS a Controller.

2. Lea y guarde el " TPEAP_SESSIONID" en Cookie y envíe una solicitud de autenticación con la Cookie.

 

Buscar Más

¿Es útil este artículo?

Tus comentarios nos ayudan a mejorar esta web.

Productos recomendados