API e exemplo de código para servidor de portal externo (Omada Controller 4.1.5 a 4.4.6)

Knowledgebase
Configuration Guide
Portal
API
07-06-2023
18061

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.

 

Por favor, avalie este documento

Documentos relacionados