Los requisitos para establecer un servidor de portal externo (por encima de Omada SDN Controller 5.0.15)
Para Omada Controller v4 (4.1.5 a 4.4.6), consulte la pregunta frecuente 2907 .
Para Omada Controller v3, 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. |
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 llevar 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. |
Plantilla de código PHP:
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;
}
Si pasa la autenticación de inicio de sesión, el Controlador responderá con el siguiente JSON en el cuerpo HTTP. Tenga en cuenta que el token dentro del resultado es el CSRF-Token, que debe agregarse al encabezado HTTP de los siguientes pasos.
{
"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/CONTROLLER_ID/api/v2/hotspot/extPortal/auth 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”
time |
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. 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.
¿Es útil esta faq?
Sus comentarios nos ayudan a mejorar este sitio.