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

1. O cliente sem fio se conecta ao SSID da rede wireless e tenta acessar a internet. O dispositivo EAP intercepta a requisição HTTP do cliente e a redireciona para o Omada Controller. (Passo 1 e Passo 2)
2. O Omada Controller então redireciona a requisição do cliente para a página do portal externo respondendo com uma resposta HTTP com código de status 302 Found ao cliente. (Passo 3 e Passo 4)
3. O cliente envia uma requisição HTTP GET para o portal web externo com o parâmetro “?target=target_controller_ip&targetPort=target_controller_port&clientMac=client_mac&clientIp=client_ip&raidusServerIp=radius_server_ip&ap=ap_mac&ssid=ssid&radioId=radio_id(0 para rádio 2.4G, 1 para rádio 5G)&redirectUrl=redirecturl(se você não definir a URL de redirecionamento após os clientes sem fio passarem pela autenticação do portal, a URL de redirecionamento padrão dependerá do cliente sem fio)”.
Por exemplo, “http://172.30.30.113?target=172.30.30.113&targetPort=8088&clientMac=F8-1E-DF-AA-AA-AA&clientIP=172.30.30.103&raidusServerIp=172.30.30.120&ap=AC-84-C6-BB-BB-BB&ssid=eap_test&radioId=1&redirectUrl=https%3A%2F%2Fwww.tp-link.com” (Passo 5)
4. O servidor de portal web externo deve ser capaz de obter os valores dos parâmetros clientMac, clientIp, ap, ssid, radioId, redirectUrl. Em seguida, o servidor de portal web externo deve retornar uma página contendo um formulário. Esse formulário irá coletar as informações de username, password, clientMac, clientIp, ap, ssid, radioId e redirectUrl.
<form id="form" method="get"> (Controller 3.1.13 ou superior suporta method="post")
<div><span>username:</span><input type="text" id="username" name="username"/> </div>
<div><span>password:</span><input type="password" id="password" name="password"/></div>
<div style="display:none"><input type="text" id="clientMac" name="clientMac" /></div>
<div style="display:none"><input name="clientIp" id="clientIp"/></div>
<div style="display:none"><input name="ap" id="ap"/></div>
<div style="display:none"><input name="ssid" id="ssid"/></div>
<div style="display:none"><input name="radioId" id="radioId"/></div>
<div style="display:none"><input name="redirectUrl" id="redirectUrl"/></div>
<button type="submit">submit</button>
</form>
Observe que o “id” desses elementos no seu formulário deve ser igual ao deste exemplo. O método para obter os valores de “username” e “password” pode ser definido por você, porém os valores de “clientMac”, “clientIp”, “ap”, “ssid”, “radioId” e “redirectUrl” devem ser obtidos a partir da URL da requisição HTTP.
(Passo 6)
5. Após o envio, o cliente envia pacotes HTTP GET com o formulário para http://target_controller_ip:targetport/portal/radius/auth. (Passo 7, Controller 3.1.13 ou superior suporta method="post")
6. O Omada Controller se comunica com o servidor Radius para verificar o nome de usuário e a senha. (Passo 8 e Passo 9)
7. Se a autenticação for bem-sucedida, ou seja, se um Access-Accept for recebido do servidor Radius, o Omada Controller redirecionará os clientes para uma página de sucesso integrada ou para uma página web pré-definida conforme a configuração. (Passo 10)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<div id="errorHint" style="color:red"></div>
<form id="form" method="get"> (Controller 3.1.13 ou superior suporta method="post")
<div><span>username:</span><input type="text" id="username" name="username"/> </div>
<div><span>password:</span><input type="password" id="password" name="password"/></div>
<div style="display:none"><input type="text" id="clientMac" name="clientMac" /></div>
<div style="display:none"><input name="clientIp" id="clientIp"/></div>
<div style="display:none"><input name="ap" id="ap"/></div>
<div style="display:none"><input name="ssid" id="ssid"/></div>
<div style="display:none"><input name="radioId" id="radioId"/></div>
<div style="display:none"><input name="redirectUrl" id="redirectUrl"/></div>
<button type="submit">submit</button>
</form>
<script type="text/javascript">
var errorHint = getQueryString("errorHint")
if (errorHint != null){
document.getElementById("errorHint").innerHTML = errorHint.replace(new RegExp('\\+', 'g'), ' ');
}
var submitUrl = "http://" + getQueryString("target") + ":" + getQueryString("targetPort") + "/portal/radius/auth";
document.getElementById("form").action = submitUrl;
document.getElementById("clientMac").value = getQueryString("clientMac");
document.getElementById("clientIp").value = getQueryString("clientIp");
document.getElementById("ap").value = getQueryString("ap");
document.getElementById("ssid").value = getQueryString("ssid");
document.getElementById("radioId").value = getQueryString("radioId");
document.getElementById("redirectUrl").value = getQueryString("redirectUrl");
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return decodeURIComponent(r[2]); return null;
}
</script>
```