Omada Controller V4.1.5 이상에 적합
Omada Controller 버전이 Omada Controller 4.1.5보다 낮으면 FAQ 2274를 참조하십시오.
Omada Controller 버전이 Omada Controller 2.6.0 미만인 경우 FAQ 928을 참조하십시오.
이 문서는 외부 포털 서버를 구축 할 때 요구 사항을 간략하게 설명합니다. 아래 그림은 무선 포털 클라이언트, EAP 장치, Omada 컨트롤러, 포털 서버 및 인증 서버 간의 데이터 흐름을 보여줍니다. 이는 외부 포털 서버 설정 요구 사항을보다 잘 이해하는 데 도움이됩니다.
- 무선 클라이언트가 포털 인증이 활성화 된 SSID에 연결되어 인터넷에 액세스하려고합니다. EAP 장치는 클라이언트의 HTTP 요청을 가로 채서 Omada Controller로 리디렉션합니다. 유선 클라이언트가 포털 인증이 활성화 된 네트워크에 연결되어 인터넷에 액세스하려고합니다. 게이트웨이는 클라이언트의 HTTP 요청을 가로 챈 다음 Omada Controller로 리디렉션합니다. 그러면 클라이언트는 EAP로부터 수신 한 HTTP 응답에 따라 URL에 "cid = client_mac & ap = ap_mac & ssid = ssid_name & t = time_since_epoch & rid = Radio_id"라는 쿼리 문자열을 사용하여 "GET Request"을 Omada 컨트롤러로 보냅니다. (1 단계 및 2 단계)
- 그런 다음 Omada Controller는 상태 코드가 302 인 클라이언트에 HTTP 응답을 회신하여 클라이언트를 외부 포털 서버로 리디렉션합니다. 이 상태 코드가있는 HTTP 응답은 위치 필드에 외부 포털 서버의 URL을 추가로 제공합니다. URL에는 쿼리 문자열도 포함되어 있습니다. Omada Controller 4.1.5 이상의 경우 EAP의 URL은 http : // portal_server_ip? clientMac = client_mac & apMac = ap_mac & ssidName = ssid_name & t = time_since_epoch & radioId = Radio_id & site = site_name & redirectUrl = xx.입니다. client_mac & gatewayMac = gateway_mac & vid = vid & t = time_since_epoch & site = site_name & redirectUrl = xx. (3 단계 및 4 단계)
매개 변수의 의미는 표 1 매개 변수 설명에 나열되어 있습니다.
clientMac |
클라이언트의 MAC 주소입니다. |
apMac |
클라이언트가 연결된 EAP의 MAC 주소입니다. |
gatewayMac |
이트웨이의 MAC 주소입니다. |
vid |
폴털 기능을 가능하게하는 유선 네트워크의 VLAN ID. |
ssidName |
연결된 SSID 이름 |
t |
1970 년 1 월 1 일 00:00:00 Epoch 이후의 시간 (초) |
radioId |
연결된 SSID의 무선 ID (0은 2.4G, 1은 5G)입니다. |
site |
사이트 이름 |
redirectUrl |
관리 인터페이스의 방문 페이지 구성 항목에 설정된 URL입니다. (포털 서버에 매개 변수 만 제공하면 실제 리디렉션 인터페이스는 포털 서버에 의해 결정됩니다.) |
- 클라이언트는 위에서 언급 한 URL을 사용하여 외부 포털 서버에 GET 요청을 보냅니다 (5 단계).
4. 외부 포털 서버는 GET 요청의 쿼리 문자열에 매개 변수를 가로 채서 기록하고 무선 클라이언트에 인증 양식이있는 웹 페이지를 반환 할 수 있어야합니다. (6 단계)
- 클라이언트의 인증 정보가 포털 서버에 제출되고 포털 서버가 정보를 인증 서버에 제출합니다 (7 단계 및 8 단계). 그러나 포털 서버가 클라이언트의 인증 정보를 얻는 방법과 포털 서버가 인증 서버와 통신하는 방법은이 기사의 범위를 벗어난 자체 구현에 달려 있습니다.
- 인증 서버는 인증 정보를 확인하고 결과를 포털 서버로 리턴합니다. (단계 9)
참고 : 이 예에서는 포털 서버와 인증 서버가 분리되어 있습니다. 그러나 원하는 것과 동일한 서버에 설치할 수 있습니다. 인증 방법도 귀하에게 달려 있습니다. 인증이 전달 된시기를 포털 서버가 알고 있는지 확인하십시오.
- 인증에 성공하면 포털 서버는 Omada Controller의 API를 호출하여 클라이언트 정보를 Omada Controller로 보내야합니다. 먼저, "POST"요청을 보내 Omada Controller에 로그인해야합니다. 요청의 URL은 https : // host : port / hotspot / login이며 HTTP 메시지 본문에서 JSON 형식을 사용하여“name = the_username_of_ operator & password = the_password_of_operator”데이터를 전달합니다.
호출 인터페이스는 POST / api / v2 / hotspot / login입니다. 전달 매개 변수는 JSON : {name : xxx, password : xxx}입니다. 여기서 계정 및 비밀번호는 컨트롤러에 로그인하기위한 계정 및 비밀번호가 아니라 핫스팟 관리자 인터페이스에 추가 된 운영자입니다.
For example,
private static function login()
{
$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, CONTROLLER_SERVER . "/login");
curl_setopt($ch, CURLOPT_POSTFIELDS, "name=" . OPERATOR_USER ."&password=" . OPERATOR_PASSWORD);
$res = curl_exec($ch);
$resObj = json_decode($res);
//Prevent CSRF
if($resObj->success == true){
self::setCSRFToken($resObj->value);
}
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;
}
(Step 10)
- 포털 서버가 컨트롤러에 성공적으로 로그인 한 경우 클라이언트 정보를 https : // controller_server_ip : https_port / api / v2 / hotspot / extPortal / auth? token = CSRFToken using POST 메소드로 보냅니다. 정보 데이터는 "JSON"farmat로 표시 될 수 있으며 아래 매개 변수를 포함해야합니다.
EAP의 경우
clientMac = client_mac & apMac = ap_mac & ssidName = ssid_name & t = time_since_epoch & radioId = Radio_id & site = site_name & time = expire_time
게이트웨이의 경우
clientMac = client_mac & gatewayMac = gateway_mac & vid = vid & t = time_since_epoch & site = site_name & time = expire_time
예를 들어 (EAP의 경우)
private static function authorize($clientMac,$apMac,$ssidName,$radioId,$t,$seconds,$site)
{
// Send user to authorize and the time allowed
$authInfo = array(
'clientMac' => $clientMac,
'apMac' => $apMac,
''ssidName => $ssidName,
'radioId ' => $radioId,
't' => $t,
'time' => $seconds
);
$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
$csrfToken = self::getCSRFToken();
curl_setopt($ch, CURLOPT_URL, CONTROLLER_SERVER ."/extportal/". $site."/auth"."?token=".$csrfToken);
$data = json_encode($authInfo);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($authInfo));
$res = curl_exec($ch);
$resObj = self::resultConvert($res);
if($resObj['success'] == false){
echo $res;
}
curl_close($ch);
}
private static function resultConvert($json)
{
$json = str_replace(array('{','}',':',','),array('[{" ',' }]','":',',"'),$json);
function cb_quote($v)
{
return '"'.trim($v[1]).'"';
}
$newJSON=preg_replace_callback("~\"(.*?)\"~","cb_quote", $json);
$res = json_decode($newJSON, true)[0];
return $res;
}
private static function getCSRFToken(){
$myfile = fopen(TOKEN_FILE_PATH, "r") or die("Unable to open file!");
$token = fgets($myfile);
fclose($myfile);
return $token;
}
(단계 11)
이러한 매개 변수의 의미는 표 1의 매개 변수 설명과 동일합니다. 여기서 시간 매개 변수는 클라이언트 인증이 만료되기 전의 시간 (초)입니다. 이 매개 변수는 포털 서버에 의해 정의됩니다.
- Omada Controller는 Omada Controller가 HTTP POST 요청에 제공된 정보를 처리 한 후 포털 서버에 "Jsuccess": { "success": [true / false], "message": "return information"}을 반환합니다. 포털 서버가 JSON 메시지를 처리하는 방법은 사용자의 구현에 따라 다릅니다. (12 단계)
TOKEN_FILE_PATH는 로그인 요청에서 반환 된 CSRFToken을 저장하는 파일이며 고객이 직접 구성 할 수 있습니다.
참고 : API를 성공적으로 호출하려면 다음 두 가지 사항을 달성하도록 포털 서버를 구성해야합니다.
- 자체 서명 된 인증서를 허용하십시오.
- 서버 https 패킷을 읽고 쿠키에 TPEAP_SESSIONID를 저장 한 후 나중에이 쿠키를 요청하십시오.