I requisiti per stabilire un collegamento con External Portal Server (Omada SDN Controller 5.0.15)
Per Omada Controller v4 (4.1.5 to 4.4.6) fai riferimento a FAQ 2907.
Per Omada Controller v3 fai riferimento a FAQ 2274.
Rispetto a Omada SDN Controller v4 le principali differenze sono:
1. Aggiunta del Controller ID all'URL per l'hotspot login e delle informazioni di sottoscrizione del client.
2. Aggiunta dell' HTTP header, che porta il CSRF Token.
Nota: le keywords in Bold Italics indicano parametri automaticamente impostati dall'EAP o dal Gateway e dovrebero essere correttamente identificate e consegnate dal server del tuo portale esterno. Il significato dei parametri è esplicitato alla prima comparsa.
Il documento specifica i requisiti necessari per stabilire il collegamento con il server di un portale web esterno. Per comprendere meglio i requisiti necessari a stabilire un External Web Portal, Portale, la seguente immagine illustra il workflow che intercorre tra client wireless, EAP, Omada Controller, Portale e Server di autenticazione, Server.
Steps 1 e 2.
Quando un client wireless o cablato è connesso alla SSID del network Wi-Fi o LAN e prova ad accedere a Internet, L'EAP o il gateway intercettano la richiesta HTTP del client reindirizzandola al Controller Omada SDN, insieme alle informazioni inserite automaticamente dall'EAP o dal Gateway nell'URL.
Steps 3 e 4.
Il client invia richiesta HTTP GET con le informazioni di connessione al Controller e viene reindirizzao al Portale dalla risposta HTTP con codice 302 del Controller. La riposta HTTP include l'URL del Portale nel campo PORTAL insieme alle informazioni di connessione (maggiori dettagli sui contenuti dell'URL nello schema sotto riportato)
URL per 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 per Gateway: http(s)://PORTAL?clientMac=CLIENT_MAC&gatewayMac=GATEWAY_MAC&vid=VLAN_ID&t=TIME_SINCE_EPOCH&site=SITE_NAME&redirectUrl=LANDING_PAGE.
PORTAL |
Indirizzo IP o URL e Port number (se necessario) del server del portale esterno. |
|
clientMac |
CLIENT_MAC |
Indirizzo MAC del client. |
apMac |
AP_MAC |
Indirizzo MAC dell'EAP a cui il client è connesso. |
gatewayMac |
GATEWAY_MAC |
Indirizzo MAC del Gateway. |
vid |
VLAN_ID |
VLAN ID del network cablato a cui è connesso il client. |
ssidName |
SSID_NAME |
Nome dell'SSID a cui il client è connesso. |
radioId |
RADIO_ID |
Radio ID della banda a cui il client è connesso in cui 0 rappresenta la banda 2.4G e 1 rappresenta la banda 5G. |
site |
SITE_NAME |
Nome del sito. |
redirectUrl |
LANDING_PAGE |
URL su cui reindirizzare l'utente una volta eseguita l'autenticazione, può essere impostata in Landing Page. |
t |
TIME_SINCE_EPOCH |
In microsecondi. |
Step 5 e 6.
Il client invierà la richiesta HTTP GET al Portale con l'URL che abbiamo visto sopra. Il Portale sarà in grado di riconoscere e mantenere le informazion idi connessione inserite nella query dell' HTTP GET e restituire la pagina web di autenticazione.
Step 7, 8, e 9.
Il Client invierà le informazioni di autenticazione al Portale che verranno consegnate direttamente al Server di autenticazione per essere verificate. Il Server invierà i risultati al Portale in risposta.
Puoi decidere come il Portale ottiene le informazioni di autenticazione dal client e come il Portale comunica con il Server di autenticazione in base alle tue necessità.
NOTA: nell'immagine sopra il Portale e il Server di autenticazione sono separati. Se lo desideri puoi installarli sullo stesso server. Anche la scelta del metodo di autenticazione dipende dalle tue necessità. Assicurati però che il Portale possa riconoscere i risultati dell'autenticazione trasmessi dal Server.
Step 10 e 11.
Se la richiesta di autenticazione viene autorizzata, il Portale invierà le informazioni del Client al Controller richiamando la sua API.
Prima, deve accedere al Controller inviando una richiesta HTTP POST. L'URL della richiesta dovrebbe essere così composta https://CONTROLLER:PORT/CONTROLLER_ID/api/v2/hotspot/login e dovrebbe trasportare le inormazioni dell'account dell'operatore in formato JSON nell' HTTP message body: “name=OPERATOR_USERNAME&password=OPERATOR_PASSWORD”.
Nota che l'account e la password qui sono quelle dell'operatore aggiunto all'interfaccia di management dell'hotspot, non i dati di accesso per l'account del Controller
CONTROLLER |
Indirizzo IP o URL di Omada SDN Controller. |
PORT |
Porta HTTPS per Controller Management di Omada SDN Controller (di default 8043 per il software e 433 per hardware controllert, vai in Settings --- Controller --- Access Config per modificarle). |
CONTROLLER_ID |
Identificativo di Omada SDN Controller. Quando accedi al controller l'identificativo sarà aggiunto automaticamente all'URL. Verifica L'URL per ottenere l'ID. Ad esempio, se l'URL del tuo controller è https://localhost:8043/abcdefghijklmnopqrstuvwxyzabcdef/ allora il CONTROLLER_ID è abcdefghijklmnopqrstuvwxyzabcdef. |
OPERATOR_USERNAME |
Username dell'operatore dell'hotspot. |
OPERATOR_PASSWORD |
Password dell'operatore dell'hotspot. |
Codice Template 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);
// Set return to a value, not return to page
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Set up cookies. COOKIE_FILE_PATH defines where to save Cookie.
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIE_FILE_PATH);
curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIE_FILE_PATH);
// Allow Self Signed Certs
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
// API Call
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);
//Prevent CSRF. TOKEN_FILE_PATH defines where to save Token.
if ($resObj->errorCode == 0) {
// login successfully
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 l'autenticazione va a buon fine, il Controller risponderà con il seguente JSON nell' HTTP body. Nota che il token inside result è CSRF-Token, che andrà aggiunto all' HTTP Header nei prossimi step.
{
"errorCode": 0,
"msg": "Hotspot log in successfully.",
"result": {
"token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
Step 12 e 13.
Una volta completato il login con successo, il Portale può inviare il risultato di autenticazione al client https://CONTROLLER:PORT/CONTROLLER_ID/api/v2/hotspot/extPortal/auth con metodo HTTP POST.
Le informazioni del client devon oessere incapsulate in formato JSON e contenere i seguenti parametri.
Per EAP: “clientMac=CLIENT_MAC&apMac=AP_MAC&ssidName=SSID_NAME &radioId=RADIO_ID&site=SITE_NAME&time=EXPIRE_TIME&authType =4”
Per Gateway: “clientMac=CLIENT_MAC&gatewayMac=GATEWAY_MAC&vid=VLAN_ID&site=SITE_NAME&time=EXPIRE_TIME&authType =4”
time |
EXPIRE_TIME |
Scadenza dell'autenticazione. Unità di tempo microsecondi. |
PHP Code Template per EAP:
public static function authorize($clientMac, $apMac, $ssidName, $radioId, $milliseconds)
{
// Send user to authorize and the time allowed
$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);
// Set return to a value, not return to page
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Set up cookies.
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIE_FILE_PATH);
curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIE_FILE_PATH);
// Allow Self Signed Certs
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
// API Call
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) {
// authorized successfully
}
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;
}
If the authentication request is accepted, the Controller will reply with the following JSON:
{
"errorCode": 0
}
Nota: il Portale deve esere in grado di supportare i seguenti requisiti:
1. Consentire certificati Auto-Firmati. Oppure caricherai il tuo certificato HTTPS sul Controller.
2. Leggi e salva “TPEAP_SESSIONID” in Cookie e inviare richiesta di autenticazione con i Cookie.