Ejemplo de código y API para servidor de portal externo (controlador Omada 4.1.5 a 4.4.6)
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.