API e exemplo de código para servidor RADIUS com portal web externo (Controladora Omada 3.0.5 ou inferior)
Adequado para EAP/Omada Controller 3.0.5 ou inferior.
Para Omada Controller 3.1.4 a 3.2.17, por favor consulte o FAQ2390.
Para Omada Controller 4.1.5 ou superior, por favor consulte o FAQ2912.
Este documento descreve os requisitos para estabelecer um servidor de portal web externo. No Omada EAP Controller, o Portal Web Externo (External Web Portal) só pode ser usado quando o tipo de autenticação do portal for Servidor Radius Externo (External Radius Server). Para saber como configurar a autenticação via Servidor Radius Externo, consulte o FAQ 896 (seção 4 do passo 2).
A imagem abaixo ilustra o fluxo de trabalho entre o cliente wireless, o EAP, o controlador Omada EAP, o Portal Web Externo e o Servidor Radius. Isso ajudará você a entender melhor os requisitos para estabelecer um servidor de Portal Web Externo.

- O cliente wireless conecta-se ao SSID da rede sem fio e tenta acessar a internet. O dispositivo EAP intercepta a requisição HTTP do cliente e a redireciona para o controlador EAP. (Passo 1 e Passo 2)
- O controlador EAP então redireciona a requisição do cliente para a página do portal externo enviando uma resposta HTTP com o código de status 302 Found para o cliente. (Passo 3 e Passo 4)
- O cliente envia uma requisição HTTP GET para o portal web externo com os parâmetros “target=target_ap_ip&clientMac=client_mac&raidusServerIp=radius_server_ip&apMac=ap_Mac&ssid=ap_ssid”. Por exemplo: 192.168.10.104/?target=192.168.10.102&clientMac=38-71-de-31-7d-67&radiusServerIp=192.168.10.100&apMac=AC-84-C6-35-6E-10&ssid=TP-Link_2.4GHz_356E10 (Passo 5)
- O servidor do portal web externo deve ser capaz de obter os valores dos parâmetros target, clientMac e radiusServerIp. Em seguida, o servidor do portal externo deve retornar uma página com um formulário. Este formulário coletará as informações de nome de usuário (username), senha (password), clientMac e radiusServerIp.
Por exemplo:
<form id="form" method="post">
<div><span>usuário:</span><input type="text" name="username"/> </div>
<div><span>senha:</span><input type="password" name="password"/> </div>
<div style="display:none"><span>clientMac:</span><input type="text" id="cid" name="clientMac" /></div>
<div style="display:none"><input name="radiusSvrIp" id="radiusServerIp"/> </div>
Observe que o “id” desses elementos no seu formulário deve ser o mesmo deste exemplo. O método para obter o valor de “username” e “password” pode ser definido por você, mas os valores de “cid” e “radiusServerIp” devem ser obrigatoriamente obtidos a partir da URL da Requisição HTTP.
(Passo 6)
- O cliente envia pacotes HTTP GET com o formulário para http://target_ap_ip/portal/auth após o envio (submit). (Passo 7)
- O EAP comunica-se com o servidor radius para verificar o usuário e a senha. (Passo 8 e Passo 9)
- Se a autenticação for aprovada (ou seja, um Access-Accept for recebido do servidor radius), o EAP redirecionará o cliente para o EAP/Omada Controller para solicitar uma página de sucesso integrada ou uma página da web predefinida, de acordo com a configuração. (Passo 10)
O modelo HTML abaixo é uma demonstração simples para você desenvolver seu Portal Web Externo compatível com o EAP/Omada Controller:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
//configura um formulário, o método é post
<form id="form" method="post">
//conteúdo do formulário
<div><span>usuário:</span><input type="text" name="username"/> </div>
<div><span>senha:</span><input type="password" name="password"/></div>
<div style="display:none"><span>clientMac:</span><input type="text" id="cid" name="clientMac" /></div>
<div style="display:none"><input name="radiusSvrIp" id="radiusServerIp"/></div>
<button type="submit">enviar</button>
</form>
<script type="text/javascript">
//para onde enviar o formulário
var submitUrl = "http://" + getQueryString("target") + "/portal/auth";
document.getElementById("form").action = submitUrl;
//atribui o valor do parâmetro “clientMac” ao elemento do formulário “cid”
document.getElementById("cid").value = getQueryString("clientMac");
//atribui o valor do parâmetro “radiusServerIp” ao elemento do formulário “radiusServerIp”
document.getElementById("radiusServerIp").value = getQueryString("radiusServerIp");
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]); return null;
}
</script>