API e exemplo de código para servidor de portal externo (Omada Controller 4.1.5 a 4.4.6)
Adequado para Omada Controller 4.1.5 a 4.4.6.
Para Omada Controller 5.0.15 ou superior, consulte o FAQ 3231
Para Omada Controller 2.6.0 a 3.2.17, consulte o FAQ 2274
Para Omada Controller 2.5.4 ou inferior, consulte o FAQ 928
Nota: As palavras-chave em Negrito Itálico indicam configurações que são necessárias automaticamente pelo EAP ou Gateway, e devem ser corretamente identificadas e entregues pelo seu Servidor de Portal Externo. Os significados das parâmetros são declarados em sua primeira amizade.
Este documento descreve os requisitos para estabelecer um Servidor de Portal Externo (chamado abreviadamente de Portal ). A imagem abaixo ilustra o fluxo de dados entre os dispositivos de rede, o que pode ajudar a entender melhor o mecanismo de funcionamento.

Passos 1 e 2.
Quando um cliente se conecta à rede sem fio ou cabeada vinculada a um Portal ativado e tenta acessar a Internet, sua solicitação HTTP será interceptada pelo EAP ou Gateway, respectivamente, e então redirecionada para o Omada SDN Controller (chamado abreviadamente de Controlador ) junto com as informações de conexão que são bloqueadas automaticamente pelo EAP ou Gateway na URL.
Passos 3 e 4.
Depois disso, o cliente enviará uma solicitação HTTP GET com as informações de conexão para o Controlador e será redirecionado para o Portal pela resposta do Controlador com um status HTTP 302. A resposta HTTP inclui uma URL do Portal no campo 'location', bem como as informações de conexão.
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 |
O endereço IP ou URL, e o número da porta (se necessário) do Servidor do Portal Externo. |
|
|
clienteMac |
CLIENTE_MAC |
Endereço MAC do cliente. |
|
apMac |
AP_MAC |
Endereço MAC do EAP ao qual o cliente está conectado. |
|
gatewayMac |
GATEWAY_MAC |
Endereço MAC do Gateway. |
|
vídeo |
ID_da_VLAN |
ID da VLAN da rede cabeada a qual cliente está conectado. |
|
ssidName |
SSID_NAME |
Nome do SSID ao qual o cliente está conectado. |
|
radioId |
ID_DA_RÁDIO |
ID do Rádio da banda a qual o cliente está conectado, onde 0 representa 2.4G e 1 representa 5G. |
|
site |
NOME_DO_SITE |
Nome do Site. |
|
URL de redirecionamento |
PÁGINA_DE_DESTINO |
URL a ser visitada após a autenticação bem-sucedida, que pode ser definida na Página de Destino (Landing Page). |
|
t |
TEMPO_DESDE_A ÉPOCA |
A unidade aqui é microssegundo. |
Passos 5 e 6.
O cliente enviará uma solicitação HTTP GET para o Portal com a URL acima. O Portal deve ser capaz de confidencialidade e manter as informações de conexão na query string da solicitação HTTP GET e retornar a página da web para autenticação.
Passos 7, 8 e 9.
O cliente enviará as informações de autenticação para o Portal, que serão entregues ao servidor de autenticação e verificados. Em seguida, o servidor de autenticação retorna o resultado da autenticação para o Portal.
Você pode decidir como o Portal obtém as informações de autenticação do cliente e como o Portal se comunica com o servidor de autenticação, de acordo com seus próprios requisitos, ou que está fora do escopo deste artigo.
NOTA: Na figura acima, o Portal e o servidor de autenticação estão separados. Você pode convidá-los no mesmo servidor se desejar. O método de autenticação também depende de você. Apenas proteja-se de que o Portal possa conhecer o resultado da autenticação vinda do servidor de autenticação.
Passos 10 e 11.
Se uma solicitação de autenticação autorizada, o Portal deverá enviar as informações do cliente para o Controlador solicitando sua API.
Primeiro, ele deve fazer login no Controlador enviando uma solicitação HTTP POST . A URL da solicitação deve ser https:// CONTROLLER : PORT /api/v2/hotspot/login e deve carregar as informações da conta do operador em formato JSON no corpo da mensagem HTTP: “name= OPERATOR_USERNAME &password= OPERATOR_PASSWORD ” .
A interface de chamada é POST /api/v2/hotspot/login. O parâmetro de passagem é JSON: {“name”:”xxx”, “password”:”xxx”}. Observe que a conta e a senha aqui são do operador adicionado na interface do gerenciador de hotspot, e não a conta e senha da conta do controlador.
|
CONTROLADOR |
Endereço IP ou URL do Omada SDN Controller. |
|
PORTA |
Porta HTTPS para Gerenciamento do Controlador do Omada SDN Controller (8043 para software e 443 para OC por padrão, vá em Configurações --- Controlador --- Access Config para modificação). |
|
NOME_DE_USUÁRIO_DO_OPERADOR |
Nome do usuário do operador do hotspot. |
|
SENHA_DO_OPERADOR |
Senha do operador do hotspot. |
Modelo de código PHP:
função estática privada login()
{
$ch = curl_init();
// publicar
curl_setopt($ch, CURLOPT_POST, TRUE);
// Define retorno para um valor, não retorna para a página
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//Configurar cookies. COOKIE_FILE_PATH define onde salvar o Cookie.
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIE_FILE_PATH);
curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIE_FILE_PATH);
// Permitir Certificados Autoassinados
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
// Chamada de API
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);
//Prevenir CSRF. TOKEN_FILE_PATH define onde salvar o Token.
se ($resObj->success == true){
self::setCSRFToken($resObj->value);
}
curl_close($ch);
}
função estática privada setCSRFToken($token){
$meuarquivo = fopen(TOKEN_FILE_PATH, "w") or die("Não foi possível abrir o arquivo!");
fwrite($myfile, $token);
fclose($myfile);
retornar $token;
}
Se a autenticação de login passar, o Controlador responderá com o seguinte JSON no corpo do HTTP.
{
"errorCode": 0,
"msg": "Acesso ao ponto de acesso realizado com sucesso."
"resultado": {
"token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
Passos 12 e 13.
Após o login bem-sucedido, o Portal poderá enviar o resultado da autenticação do cliente para https:// CONTROLLER : PORT /api/v2/hotspot/extPortal/auth?token=CSRFToken com o método HTTP POST . As informações do cliente devem ser encapsuladas no formato JSON e conter as seguintes 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 ”
|
tempo |
EXPIRE_TIME |
Tempo de expiração da autenticação. A unidade aqui é microssegundo. |
Modelo de código PHP para EAP:
função estática privada authorize($clientMac,$apMac,$ssidName,$radioId,$milliseconds,$site)
{
//Enviar usuário para autorizar e o tempo permitido
$authInfo = array(
'clientMac' => $clientMac,
'apMac' => $apMac,
''ssidName => $ssidName,
'radioId ' => $radioId,
'tempo' => $milissegundos,
'authType' => 4
);
$ch = curl_init();
// publicar
curl_setopt($ch, CURLOPT_POST, TRUE);
// Define retorno para um valor, não retorna para a 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 Autoassinados
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
// Chamada de API
$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);
se ($resObj['success'] == falso){
eco $res;
}
curl_close($ch);
}
função estática privada resultConvert($json)
{
$json = str_replace(array('{','}',':',','),array('[{" ',' }]','":',',"'),$json);
função cb_quote($v)
{
retornar '"'.trim($v[1]).'"';
}
$newJSON=preg_replace_callback("~\"(.*?)\"~","cb_quote", $json);
$res = json_decode($newJSON, true)[0];
retornar $res;
}
função estática privada getCSRFToken(){
$meuarquivo = fopen(TOKEN_FILE_PATH, "r") or die("Não foi possível abrir o arquivo!");
$token = fgets($myfile);
fclose($myfile);
retornar $token;
}
Se uma solicitação de autenticação para aceitação, o Controlador responderá com o seguinte JSON:
{ "errorCode": 0 }
Nota : O Portal deve ser capaz de atender aos dois requisitos seguintes:
1. Permitir certificado autoassinado . Ou você deve carregar seu próprio certificado HTTPS no Controlador.
2. Ler e salvar o “TPEAP_SESSIONID” no Cookie e enviar uma solicitação de autenticação com esse Cookie.