API e exemplo de código para servidor de portal externo (Omada Controller 5.0.15 ou superior)

Knowledgebase
Configuration Guide
Portal
API
04-15-2026
72459
Este Artigo se aplica a

Conteúdo

Objetivo

Requisitos

Introdução

Configuração

 

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.

O fluxo de dados entre os dispositivos de rede.

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.

A página de configuração da Página de Destino.

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.

A página de criação de Operador.

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.

Por favor, avalie este documento

Documentos relacionados