API e exemplo de código para servidor de portal externo (Omada Controller 5.0.15 ou superior)
Conteúdo
Objetivo
Este guia fornece API e Amostra de Código para Servidor de Portal Externo (Omada Controller 5.0.15 ou superior).
Adequado para Omada Controller 5.0.15 ou superior.
Para Omada Controller 4.1.5 a 4.4.6, por favor consulte o FAQ 2907
Para Omada Controller 2.6.0 a 3.2.17, por favor consulte o FAQ 2274
Requisitos
- Omada Controller (v5.0.15 ou superior)
Introdução
Em comparação ao Omada SDN Controller v4, as principais mudanças são as seguintes:
1. Adição do ID do Controlador à URL para login no hotspot e envio de informações do cliente.
2. Adição do cabeçalho HTTP, que transporta o CSRF Token.
Nota: As palavras-chave em Negrito e Itálico indicam parâmetros que são preenchidos automaticamente pelo EAP ou Gateway e devem ser identificados e entregues corretamente pelo seu Servidor de Portal Externo. Os significados dos parâmetros são declarados na primeira aparição.
Configuração
Este documento descreve os requisitos para estabelecer um Servidor de Portal Externo (Portal, abreviadamente). A imagem abaixo descreve o fluxo de dados entre os dispositivos de rede, o que pode ajudar a compreender melhor o mecanismo de funcionamento.

Passos 1 e 2.
Quando um cliente se conecta à rede sem fio ou com fio 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 (Controller, abreviadamente) junto com as informações de conexão que são preenchidas 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 Controller e será redirecionado para o Portal pela resposta do Controller com uma resposta HTTP de código de status 302. A resposta HTTP inclui a URL do Portal no campo de localização, 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 de Portal Externo. |
|
|
clientMac |
CLIENT_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. |
|
vid |
VLAN_ID |
ID da VLAN da rede cabeada à qual o cliente está conectado. |
|
ssidName |
SSID_NAME |
Nome do SSID ao qual o cliente está conectado. |
|
radioId |
RADIO_ID |
ID do rádio da banda à qual o cliente está conectado, onde 0 representa 2.4G e 1 representa 5G. |
|
site |
SITE_NAME |
Nome do site. |
|
redirectUrl |
LANDING_PAGE |
URL para visitar após a autenticação bem-sucedida, que pode ser definida na Página de Destino (Landing Page). |
|
t |
TIME_SINCE_EPOCH |
A unidade aqui é microssegundo. |
Aqui está um exemplo do Omada Controller v6.

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 reconhecer e manter as informações de conexão na string de consulta da solicitação HTTP GET e retornar a página web para autenticação.
Passos 7, 8 e 9.
O cliente enviará informações de autenticação para o Portal, que serão entregues ao servidor de autenticação e verificadas. 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, o que está além do escopo deste artigo.
NOTA: Na figura acima, o Portal e o servidor de autenticação estão separados. Você pode instalá-los no mesmo servidor, se desejar. O método de autenticação também depende de você. Apenas certifique-se de que o Portal possa conhecer o resultado da autenticação vindo do servidor de autenticação.
Passos 10 e 11.
Se a solicitação de autenticação for autorizada, o Portal deve enviar as informações do cliente para o Controller chamando sua API.
Primeiro, deve-se fazer login no Controller enviando uma solicitação HTTP POST. A URL da solicitação deve ser https://CONTROLLER:PORT/CONTROLLER_ID/api/v2/hotspot/login e deve conter as informações da conta do operador em formato JSON no corpo da mensagem HTTP: {"name": "OPERATOR_USERNAME","password": "OPERATOR_PASSWORD"}.
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.

|
CONTROLLER |
Endereço IP ou URL do Omada SDN Controller. |
|
PORT |
Porta HTTPS para Gerenciamento do Controller do Omada SDN Controller (8043 por padrão para software, e 443 para OC por padrão, vá para Settings --- Controller --- Access Config para modificação). |
|
CONTROLLER_ID |
Identificador do Omada SDN Controller. Quando você acessa o controlador, o identificador será adicionado automaticamente à URL, de onde você obterá o identificador. Por exemplo, se a URL do seu controlador for https://localhost:8043/abcdefghijklmnopqrstuvwxyzabcdef/, então o CONTROLLER_ID é abcdefghijklmnopqrstuvwxyzabcdef. |
|
OPERATOR_USERNAME |
Nome de usuário do operador do hotspot. |
|
OPERATOR_PASSWORD |
Senha do operador do hotspot. |
Modelo 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);
// Definir retorno como valor, não retornar 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, "https://" . CONTROLLER . ":" . PORT . "/" . CONTROLLER_ID . "/api/v2/hotspot/extPortal/auth");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($loginInfo));
$res = curl_exec($ch);
$resObj = json_decode($res);
//Prevenir CSRF. TOKEN_FILE_PATH define onde salvar o Token.
if ($resObj->errorCode == 0) {
// login com sucesso
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;
}
Se a autenticação de login passar, o Controller responderá com o seguinte JSON no corpo do HTTP. Observe que o token dentro do resultado é o CSRF-Token, que deve ser adicionado ao Cabeçalho HTTP dos passos seguintes.
{
"errorCode": 0,
"msg": "Hotspot log in successfully.",
"result": {
"token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
Passos 12 e 13.
Após o login bem-sucedido, o Portal pode enviar o resultado da autenticação do cliente para https://CONTROLLER:PORT/CONTROLLER_ID/api/v2/hotspot/extPortal/auth com o método HTTP POST.
As informações do cliente devem ser encapsuladas em formato JSON no corpo da mensagem HTTP e devem conter os 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"}
|
time |
EXPIRE_TIME |
Tempo de Expiração da autenticação. A unidade aqui é microssegundo. |
Modelo de Código PHP para EAP:
public static function authorize($clientMac, $apMac, $ssidName, $radioId, $milliseconds)
{
// Enviar usuário para autorizar e o tempo permitido
$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);
// Definir retorno como valor, não retornar 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
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) {
// autorizado com sucesso
}
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;
}
Se a solicitação de autenticação for aceita, o Controller responderá com o seguinte JSON:
{
"errorCode": 0
}
Nota: O Portal deve ser capaz de atender aos dois requisitos a seguir:
1. Permitir certificado autoassinado. Ou você fará o upload do seu próprio certificado HTTPS para o Controller.
2. Ler e salvar o “TPEAP_SESSIONID” no Cookie, e enviar a solicitação de autenticação com o Cookie.
* Para Controller v5.11 e superior, o nome do Cookie é “TPOMADA_SESSIONID
Para saber mais detalhes sobre cada função e configuração, por favor, acesse o Centro de Download para baixar o manual do seu produto.