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

Knowledgebase
Configuration Guide
Portal
API
09-20-2024

Adequado para Omada Controller 5.0.15 ou superior.

Para Omada Controller 4.1.5 a 4.4.6, consulte a FAQ 2907

Para Omada Controller 2.6.0 a 3.2.17, consulte FAQ 2274

 

Comparado ao Omada SDN Controller v4, as principais mudanças são as seguintes:

1. Adiciona o ID do controlador à URL para login no ponto de acesso e envio de informações do cliente.

2. Adiciona o cabeçalho HTTP, que carrega o token CSRF.

 

Nota: As palavras-chave em negrito e itálico indicam parâmetros que são preenchidos automaticamente pelo EAP ou Gateway e devem ser corretamente identificados e entregues pelo seu Servidor de Portal Externo. Os significados dos parâmetros são declarados na primeira aparição.

 

Este documento descreve os requisitos para estabelecer um Servidor de Portal Externo (abreviadamente Portal). A imagem abaixo mostra 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 está conectado à rede sem fio ou com fio vinculada a um Portal habilitado e tenta acessar a Internet, sua solicitação HTTP será interceptada por EAP ou Gateway, respectivamente, e então redirecionada para o Controlador Omada SDN (Controlador para abreviar) 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 ao Controlador e será redirecionado ao Portal pela resposta do Controlador com uma resposta HTTP com código de status 302. A resposta HTTP inclui a URL do Portal no campo de localização, bem como a conexão Informaçã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.

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.

no

ID_VLAN

ID VLAN da rede com fio à qual o cliente está conectado.

NomeSSID

SSID_NOME

Nome do SSID ao qual o cliente está conectado

identificação de rádio

ID_DO_RÁDIO

ID de rádio da banda à qual o cliente está conectado, onde 0 representa 2,4G e 1 representa 5G.

site

NOME_DO_SITE

Nome do site.

redirecionarUrl

PÁGINA_DE_TERRENO

URL a ser visitada após autenticação bem-sucedida, que pode ser definida na Landing Page.

para

TEMPO_DE_SDE_ÉPOCA

A unidade aqui é microssegundo.

 

https://static.tp-link.com/image-20210301141438-2_1614579303917s.png

 

Passos 5 e 6.

O cliente enviará uma solicitação HTTP GET para o Portal com a URL acima. O Portal deve conseguir reconhecer e manter as informações de conexão na sequência de consulta da solicitação HTTP GET e retornar a página da 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 serão verificadas. Então, 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 suas próprias necessidades, o que está além do escopo deste artigo.

 

OBSERVAÇÃO: Na figura acima, o Portal e o servidor de autenticação são separados. Você pode instalá-los no mesmo servidor que desejar. O método de autenticação também fica a seu critério. Apenas se certifique de que o Portal saiba o resultado da autenticação do servidor de autenticação.

 

Passos 10 e 11.

Se a solicitação de autenticação for autorizada, o Portal deverá enviar as informações do cliente ao Controlador chamando sua API.

Primeiro, ele deve efetuar 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 no formato JSON no corpo da mensagem HTTP: {"name": " OPERATOR_USERNAME ","password": " OPERATOR_PASSWORD "}.

Observe que a conta e a senha aqui são da operadora adicionada na interface do gerenciador de hotspot, e não da conta e senha da conta do controlador.

 

CONTROLADOR

Endereço IP ou URL do controlador Omada SDN.

PORTA

Porta HTTPS para gerenciamento do controlador Omada SDN Controller (8043 para software e 433 para OC por padrão, vá para Configurações --- Controlador --- Acesse Configuração para modificação).

ID_DO_CONTROLADOR

Identificador do Omada SDN Controller. Quando você acessa o controlador, o identificador será automaticamente adicionado à URL, da qual você obterá o identificador.

Por exemplo, se a URL do seu controlador for https://localhost:8043/abcdefghijklmnopqrstuvwxyzabcdef/, então o CONTROLLER_ID será abcdefghijklmnopqrstuvwxyzabcdef.

OPERADOR_NOME_DE_USUÁRIO

Nome de usuário do operador do hotspot.

SENHA_DO_OPERADOR

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();

// publicar

curl_setopt($ch, CURLOPT_POST, TRUE);

 

// Defina o retorno para um valor, não 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/login");

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($loginInfo));

$res = curl_exec($ch);

$resObj = json_decode($res);

//Evita 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 for aprovada, o Controller responderá com o seguinte JSON no corpo HTTP. Observe que o token dentro do resultado é o CSRF-Token, que deve ser adicionado ao HTTP Header das etapas seguintes.

{

"código de erro": 0,

"msg": "Login no hotspot com sucesso.",

"resultado": {

"token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

}

}

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 no 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 ":" MAC_DO_CLIENTE "," gatewayMac ":" MAC_DO_GATEWAY "," vid ":" ID_DA_VLAN "," site ":" NOME_DO_SITE "," time ":" TEMPO_DE_EXPIRA "," authType ":" 4 "}

 

tempo

TEMPO_DE_VALIDADE

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();

// publicar

curl_setopt($ch, CURLOPT_POST, TRUE);

 

// Defina o retorno para um valor, não 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 Controlador responderá com o seguinte JSON:

{

"errorCode": 0

}

 

Observação : o portal deve atender aos dois requisitos a seguir:

1. Permitir certificado autoassinado. Ou você fará upload do seu próprio certificado HTTPS para o Controller.

2. Leia e salve o “ TPEAP_SESSIONIDno Cookie e envie a solicitação de autenticação com o Cookie.

* Para o Controller v5.11 e superior, o nome do Cookie é “ TPOMADA_SESSIONID .

Por favor, avalie este documento

Documentos relacionados