Muestra de código y API para servidor de portal externo (Omada Controller 2.6.0 a 3.2.17)

Knowledgebase
Configuration Guide
07-06-2023
192

Adecuado para el controlador Omada 2.6.0 a 3.2.17.

Para el controlador Omada inferior a 2.5.4 o inferior, consulte FAQ928

Para Omada Controller 4.1.5 a 4.4.6, consulte FAQ2907

Para Omada Controller 5.0.15 o superior, consulte FAQ3231

 

En este documento se describen los requisitos para establecer un servidor de portal externo. Para saber cómo configurar el servidor de portal externo, consulte la pregunta frecuente-896 (paso 2 de la sección 5)

La siguiente imagen muestra el flujo de datos entre el cliente inalámbrico, el dispositivo EAP, el controlador Omada, el servidor del portal y el servidor de autenticación, lo que puede ayudarlo a comprender mejor los requisitos para establecer un servidor de portal externo.

 

1. El cliente inalámbrico está conectado al SSID en el que está habilitada la autenticación del portal e intenta acceder a Internet. El dispositivo EAP interceptará la solicitud HTTP del cliente y luego la redirigirá al controlador Omada. A continuación, el cliente enviará la solicitud GET al controlador Omada con la cadena de consulta "cid=client_mac&ap=ap_mac&ssid=ssid_name&t=time_since_epoch&rid=Radio_id" en la URL de acuerdo con la respuesta HTTP que recibe del EAP. (Paso 1 y Paso 2)

2. A continuación, el controlador Omada redirige al cliente al servidor del portal externo respondiendo al cliente una respuesta HTTP con el código de estado 302 Found. La respuesta HTTP con este código de estado proporcionará adicionalmente la URL del servidor del portal externo en el campo de ubicación. La dirección URL también contiene la cadena de consulta. Para Omada Controller 2.6.0 o superior, la URL es http://portal_server_ip?cid=client_mac&ap=ap_mac&ssid=ssid_name&t=time_since_epoch&rid=Radio_id&site=site_name. (Paso 3 y Paso 4)

El significado de los parámetros se enumera en la Tabla 1 Explicación de parámetros.

 

3. El cliente enviará la solicitud GET al servidor del portal externo utilizando la URL mencionada anteriormente. (Paso 5)

4. El servidor del portal externo debe ser capaz de interceptar y mantener un registro de los parámetros en la cadena de consulta de la solicitud GET y devolver una página web con un formulario de autenticación al cliente inalámbrico. (Paso 6)

5. La información de autenticación del cliente inalámbrico se enviará al servidor del portal, y el servidor del portal enviará la información al servidor de autenticación (Paso 7 y Paso 8). Sin embargo, la forma en que el servidor del portal obtiene la información de autenticación del cliente y la forma en que el servidor del portal se comunica con el servidor de autenticación dependen de su propia implementación, que está fuera del ámbito de este artículo.

6. El servidor de autenticación verifica la información de autenticación y devuelve el resultado al servidor del portal. (Paso 9)

 

NOTA: En este ejemplo, el servidor del portal y el servidor de autenticación están separados. Pero se pueden instalar en el mismo servidor que desee. El método de autenticación también depende de usted. Solo asegúrese de que el servidor del portal sepa cuándo se pasa la autenticación.

 

7. Si la autenticación se realiza correctamente, el servidor del portal debe enviar la información del cliente al controlador de Omada llamando a la API del controlador de Omada. Primero, debe iniciar sesión en el controlador de Omada enviando una solicitud POST. La URL de la solicitud será https://controller_server_ip:https_port/login y llevará los datos "name=the_username_of_controller&password=the_password_of_controller" utilizando el formato JSON en el cuerpo del mensaje HTTP.

Por ejemplo

función estática privada login()

{

$ch = curl_init();

// Exponer

curl_setopt($ch, CURLOPT_POST, TRUE);

// Establecer el retorno a un valor, no el retorno a la página

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// Configurar cookies

curl_setopt($ch, CURLOPT_COOKIEJAR COOKIE_FILE_PATH);

curl_setopt($ch, CURLOPT_COOKIEFILE COOKIE_FILE_PATH);

// Permitir certificados autofirmados

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

// Llamada a la API

curl_setopt($ch, CURLOPT_URL, CONTROLLER_SERVER . "/inicio de sesión");

curl_setopt($ch, CURLOPT_POSTFIELDS, "name=" . CONTROLLER_USER ". &password=" . CONTROLLER_PASSWORD);

$res = curl_exec($ch);

$resObj = json_decode($res);

// Prevenir el CSRF

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;

}

(Paso 10)

 

8. Si el servidor del portal ha iniciado sesión con éxito en el controlador, enviará la información del cliente a https://controller_server_ip:https_port/extportal/site_name/auth?token=CSRFToken utilizando el método POST. Los datos de información pueden ser representados por JSON farmat y deben contener estos parámetros: "cid=client_mac&ap=ap_mac&ssid=ssid_name&t=time_since_epoch&rid=Radio_id&site=site_name&time=expire_time".

 

Por ejemplo

private static function authorize($cid,$ap,$ssid,$rid,$t,$seconds,$site)

{

// Enviar usuario a autorizar y el tiempo permitido

$authInfo = array(

'cid' => $cid,

'ap' => $ap,

'ssid' => $ssid,

'rid' => $rid,

't' => $t,

'time' => $seconds

);

$ch = curl_init();

// Exponer

curl_setopt($ch, CURLOPT_POST, TRUE);

// Establecer el retorno a un valor, no el retorno a la página

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// Configurar cookies

curl_setopt($ch, CURLOPT_COOKIEJAR COOKIE_FILE_PATH);

curl_setopt($ch, CURLOPT_COOKIEFILE COOKIE_FILE_PATH);

// Permitir certificados autofirmados

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

// Llamada a la API

$csrfToken = self::getCSRFToken();

curl_setopt($ch, CURLOPT_URL, CONTROLLER_SERVER ." /extportal/". $site". /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){

eco $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;

}

 

(Paso 11)

El significado de estos parámetros es el mismo que en la Tabla 1 Explicación de parámetros. El parámetro time aquí es el número de segundos antes de que caduque la autenticación del cliente. Este parámetro lo define el servidor del portal.

 

9. El Controlador Omada devuelve un mensaje JSON: {"success": [true/false], "message":"return information"} al servidor del portal después de que el Controlador Omada haya tratado la información proporcionada en la solicitud HTTP POST. La forma en que el servidor del portal trata el mensaje JSON depende de su propia implementación. Por último, el servidor del portal debe cerrar la sesión del controlador Omada enviando una solicitud POST a https://controller_server_ip:https_port/logout?token=CSRFToken.

Por ejemplo

private static function logout()

{

$ch = curl_init();

// Exponer

curl_setopt($ch, CURLOPT_POST, TRUE);

// Establecer el retorno a un valor, no el retorno a la página

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// Configurar cookies

curl_setopt($ch, CURLOPT_COOKIEJAR COOKIE_FILE_PATH);

curl_setopt($ch, CURLOPT_COOKIEFILE COOKIE_FILE_PATH);

// Permitir certificados autofirmados

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

// Llamada a la API

$csrfToken = self::getCSRFToken();

curl_setopt($ch, CURLOPT_URL, CONTROLLER_SERVER . "/logout"."? token=".$csrfToken);

curl_exec($ch);

curl_close($ch);

}

(Paso 12 y Paso 13)

 

 

TOKEN_FILE_PATH es un archivo que guarda el CSRFToken devuelto de la solicitud de inicio de sesión, los clientes pueden configurarlo ellos mismos.

 

Nota: Para llamar a la API correctamente, el servidor del portal debe estar configurado para lograr los dos puntos siguientes:

1. Permitir certificado autofirmado;

2. Lea el paquete https del servidor, guarde el TPEAP_SESSIONID en Cookie, solicite con esta cookie en el futuro.

Evalúa este documento

Documentos relacionados