게스트 액세스를 위해 외부 포털 사용Use an external portal for Guest Access
요약 게스트가 웹 개발자가 자체 웹 사이트에서 디자인한 로그인 포털로 이동하도록 하려면 외부 포털을 사용하도록 설정합니다.
외부 포털은 WLAN 사용자가 SSID를 선택한 후 보게 되는 웹 페이지입니다. 예를 들어 웹 개발자가 조직을 위해 특별히 설정한 회사 홈페이지 또는 로그인 포털로 게스트를 보낼 수 있습니다.
보안 강화를 위해 권한 있는 사용자, 허용된 서브넷 및 허용된 호스트 이름을 지정할 수 있습니다. 차단할 호스트 이름 목록을 입력할 수도 있습니다.
- WLAN으로 이동합니다.
참고:
-
WLAN이 WLAN 템플릿에 있는 경우 Organization( 조직) > Wireless(무선) | WLAN 템플릿에서 템플릿을 클릭한 다음 WLAN을 클릭합니다.
-
사이트 수준 WLAN의 경우 Site > Wireless(사이트 무선) | WLAN을 입력한 다음 WLAN을 클릭합니다.
-
- Edit WLAN(WLAN 편집) 창의 Guest Portal(게스트 포털)에서 Forward to external portal(외부 포털로 전달)을 클릭합니다.
- (선택 사항) 특정 사용자에 대한 액세스를 제한하려면 Edit Guest Authorization(게스트 권한 부여 편집) 버튼을 클릭합니다. 그런 다음, 다음 단계를 완료합니다.
- Authorized Guests(승인된 게스트) 창에서 Add(추가)를 클릭합니다.
- 게스트 권한 부여 창에서 게스트의 MAC 주소(필수), 선택적 사용자 정보 및 사용자 권한이 유지되는 기간을 입력합니다.
참고:
Search Client(클라이언트 검색) 옵션을 사용하여 WLAN에 이미 연결된 클라이언트를 검색할 수 있습니다.
- Authorize Guest(게스트 권한 부여) 창 하단에 있는 Authorize(승인)를 클릭합니다.
- 이 단계를 반복하여 목록에 더 많은 게스트를 추가합니다.
- Authorized Guests(승인된 게스트) 창에서 Add(추가)를 클릭합니다.
- http:// 또는 https:// 로 시작하는 포털 URL을 입력합니다.
참고:
다른 필드를 사용하여 액세스를 세밀하게 조정합니다. 예를 들어 특정 서브넷 또는 호스트 이름만 허용합니다.
- 예외 시 게스트/외부 포털 우회 확인란을 선택하거나 선택 취소합니다.
이 기능을 선택하면 각 액세스 포인트가 포털 또는 IdP에 연결을 시도하지만, 연결할 수 없는 경우 AP가 게스트에게 WLAN에 연결할 수 있는 권한을 자동으로 부여합니다.
- Edit WLAN(WLAN 편집) 창 하단의 Save(저장)를 클릭합니다.
PHP 및 추가 정보 파일을 사용하여 외부 포털 만들기
- 다음 샘플 PHP 파일 및 추가 정보를 참조하여 외부 포털을 만듭니다.
Index.php
<?php /* These parameters are sent by Mist on the 302 redirect to this portal page: wlan_id - WLAN object's UUID ap_mac - MAC address of the AP client_mac - MAC address of the client device url - Originally requested url by the client, ie: http://www.mist.com ap_name - Name of the AP site_name - Name of the Site If you want to send the guest to a content page after authorization, configure the $url instead of using the valued that is passed as a parameter. */ $wlan_id = $_GET['wlan_id']; $ap_mac = $_GET['ap_mac']; $client_mac = $_GET['client_mac']; $url = $_GET['url']; $ap_name = $_GET['ap_name']; $site_name = $_GET['site_name']; ?> <html> <body> <form action="authme.php" method="post"> <input type="hidden" name="wlan_id" value="<?php echo($wlan_id) ?>" /> <input type="hidden" name="ap_mac" value="<?php echo($ap_mac) ?>" /> <input type="hidden" name="client_mac" value="<?php echo($client_mac) ?>" /> <input type="hidden" name="url" value="<?php echo($url) ?>" /> <input type="hidden" name="ap_name" value="<?php echo($ap_name) ?>" /> <input type="hidden" name="site_name" value="<?php echo($site_name) ?>" /> <table> <tr> <td><b>Your Full Name</b></td> <td><input type="text" name="name" /></td> </tr> <tr> <td><b>Your Email Address</b></td> <td><input type="text" name="email" /></td> </tr> <tr> <td><input type="submit" value="Login" /></td> </tr> </table> </form> </body> </html>
<?php $secret = ''; // WLAN API Key, obtained from the Mist Web GUI after creating the WLAN $wlan_id = $_POST['wlan_id']; $ap_mac = $_POST['ap_mac']; $client_mac = $_POST['client_mac']; $url = $_POST['url']; $ap_name = $_POST['ap_name']; $site_name = $_POST['site_name']; $authorize_min = 525600; // Duration (in minutes) the guest MAC address is authorized before they are redirected back to the portal page $download_kbps = 0; // Download limit (in kbps) per client. Recommended to leave as 0 (unlimited), as this can be set globally in the WLAN $upload_kbps = 0; // Upload limit (in kbps) per client. Recommended to leave as 0 (unlimited), as this can be set globally in the WLAN $quota_mbytes = 0; // Quota (in mbytes) per client. Recommended to leave as 0 (unlimited) $context = sprintf('%s/%s/%s/%d/%d/%d/%d', $wlan_id, $ap_mac, $client_mac, $authorize_min, $download_kbps, $upload_kbps, $quota_mbytes ); $token = urlencode(base64_encode($context)); // The below portal fields are passed back to Mist and shown in the Guest Portal Information $name = $_POST['name']; $email = $_POST['email']; $field1 = 'Whatever you want Custom field 1 to be'; $field2 = 'Whatever you want Custom field 2 to be'; $field3 = 'Whatever you want Custom field 3 to be'; $field4 = 'Whatever you want Custom field 4 to be'; $forward = urlencode($url); // URL the user is forwarded to after authorization $extra = '&forward=' . $forward; $extra .= '&name=' . urlencode("$name"); $extra .= '&field1=' . urlencode("$field1"); $extra .= '&field2=' . urlencode("$field2"); $extra .= '&field3=' . urlencode("$field3"); $extra .= '&field4=' . urlencode("$field4"); $extra .= '&email=' . urlencode("$email"); $expires = time() + 120; // The time until which the authorization URL is valid $payload = sprintf('expires=%d&token=%s%s', $expires, $token, $extra); $signature = urlencode(base64_encode(hash_hmac('sha1', $payload, $secret, true))); $final_url = sprintf('http://portal.mist.com/authorize?signature=%s&%s', $signature, $payload); /* Debug code used for testing purposes only If set to true, display the variable details without authorizing the guest in the Mist cloud */ $debugging = false; if ($debugging) { header('Content-Type: text/plain'); echo sprintf('token : urlencode(base64(%s))', $context) . PHP_EOL; echo sprintf(' %s', $token) . PHP_EOL; echo sprintf('foward : %s', $url) . PHP_EOL; echo sprintf(' %s', $foward) . PHP_EOL; echo sprintf('payload-to-sign: %s', $payload) . PHP_EOL; echo sprintf('signature : %s', $signature) . PHP_EOL; echo sprintf('URL : %s', $final_url) . PHP_EOL; echo sprintf('client_mac : %s', $client_mac) . PHP_EOL; echo sprintf('ap_mac : %s', $ap_mac) . PHP_EOL; echo sprintf('ap_name : %s', $ap_name) . PHP_EOL; echo sprintf('wlan_id : %s', $wlan_id) . PHP_EOL; echo sprintf('site_name : %s', $site_name) . PHP_EOL; echo sprintf('name : %s', $name) . PHP_EOL; echo sprintf('email : %s', $email) . PHP_EOL; echo sprintf('field1 : %s', $field1) . PHP_EOL; echo sprintf('field2 : %s', $field2) . PHP_EOL; echo sprintf('field3 : %s', $field3) . PHP_EOL; echo sprintf('field4 : %s', $field4) . PHP_EOL; } else { // Guest is redirected to the Mist portal for authorization. If successful, the Mist portal will then redirect the guest to the $url header('Location: ' . $final_url); } ?>
읽어보기 정보This sample code shows how to use the PHP POST method to pass the below parameter values from the landing page (index.php) to the authorization page (authme.php). The authorization page will also request the user to provide some information. Authorization HOW-TOs ===================== Syntax: signature=<signature>&expires=<epoch-seconds>&token=<token>&forward=<forward> Note: Wired captive portal does not support this mechanism, please use the JWT based one. <forward>: url to forward the user to after authorization <token>: base64("wlan-id/ap-mac/client-mac/authorize_min/0/0/0") <signature>: base64(hmac_sha1(<secret>, "expires=...")) Example token : urlencode(base64("be22bba7-8e22-e1cf-5185-b880816fe2cf/5c5b35001234/d58f6bb4c9d8/480/0/0/0")) = YmUyMmJiYTctOGUyMi1lMWNmLTUxODUtYjg4MDgxNmZlMmNmLzVjNWIzNTAwMTIzNC9kNThmNmJiNGM5ZDgvNDgwLzAvMC8w expires : 1768587994 forward : urlencode("http://www.mist.com") http%3A%2F%2Fwww.mist.com%2F payload-to-sign: expires=1768587994&token=YmUyMmJiYTctOGUyMi1lMWNmLTUxODUtYjg4MDgxNmZlMmNmLzVjNWIzNTAwMTIzNC9kNThmNmJiNGM5ZDgvNDgwLzAvMC8w&forward=http%3A%2F%2Fwww.mist.com%2F secret : test-secret (only used by /authorize-test for testing purpose) signature : J7VJlf2Zlcs%2BOxhVxCf8hL0XYC0%3D final URL : http://portal.mist.com/authorize-test?signature=J7VJlf2Zlcs%2BOxhVxCf8hL0XYC0%3D&expires=1768587994&token=YmUyMmJiYTctOGUyMi1lMWNmLTUxODUtYjg4MDgxNmZlMmNmLzVjNWIzNTAwMTIzNC9kNThmNmJiNGM5ZDgvNDgwLzAvMC8w&forward=http%3A%2F%2Fwww.mist.com%2F Alternatively, you can use JWT tokens: Syntax: jwt=<jwt token> Payload: { "ap_mac": "5c5b35001234", "wlan_id": "be22bba7-8e22-e1cf-5185-b880816fe2cf", "client_mac": "d58f6bb4c9d8", "minutes": 480, "expires": 1768587994, "forward": "http://www.mist.com", "authorize_only": false } Notes: authorize_only: if true and authorization is successful, 200 OK will be returned instead of 302 Redirect the user to the `forward` URL Example ``` import jwt secret = "test-secret" payload = { "ap_mac": "5c5b35001234", "wlan_id": "be22bba7-8e22-e1cf-5185-b880816fe2cf", # only for _wireless_ captive portal "site_id": "ce22bba7-8e22-e1cf-5185-b880816fe2ce", # only for _wired_ captive portal" "port_name": "eth0", # only for _wired_ captive portal" "client_mac": "d58f6bb4c9d8", "minutes": 480, "expires": 1768587994, "forward": "http://www.mist.com", "authorize_only": False } encoded_jwt = jwt.encode(payload, secret, algorithm='HS256') ``` encoded_jwt: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdXRob3JpemVfb25seSI6ZmFsc2UsImV4cGlyZXMiOjE3Njg1ODc5OTQsImFwX21hYyI6IjVjNWIzNTAwMTIzNCIsImZvcndhcmQiOiJodHRwOi8vd3d3Lm1pc3QuY29tIiwiY2xpZW50X21hYyI6ImQ1OGY2YmI0YzlkOCIsIm1pbnV0ZXMiOjQ4MCwid2xhbl9pZCI6ImJlMjJiYmE3LThlMjItZTFjZi01MTg1LWI4ODA4MTZmZTJjZiJ9.msBloHe05XzbzaMEqjsi8XSNWa_3uc--4wucKz3dQGk final URL : http://portal.mist.com/authorize-test?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdXRob3JpemVfb25seSI6ZmFsc2UsImV4cGlyZXMiOjE3Njg1ODc5OTQsImFwX21hYyI6IjVjNWIzNTAwMTIzNCIsImZvcndhcmQiOiJodHRwOi8vd3d3Lm1pc3QuY29tIiwiY2xpZW50X21hYyI6ImQ1OGY2YmI0YzlkOCIsIm1pbnV0ZXMiOjQ4MCwid2xhbl9pZCI6ImJlMjJiYmE3LThlMjItZTFjZi01MTg1LWI4ODA4MTZmZTJjZiJ9.msBloHe05XzbzaMEqjsi8XSNWa_3uc--4wucKz3dQGk
참고:Mist 조직이 생성된 클라우드 인스턴스를 기반으로 적절한 게스트 Wi-Fi 포털 URL로 바꿉니다
portal.mist.com
. 해당 지역의 게스트 Wi-Fi 포털 URL을 조회하려면 Juniper Mist 관리 가이드의 Mist 클라우드 IP 주소 및 포트 정보를 참조하십시오. - auth.php에서 필요한
$secret
값을 얻으려면 Edit WLAN 창을 다시 열고 API Secret을 복사합니다. - 인증 페이지(authme.php)를 구성하여 필수 쿼리 문자열 파라미터와 함께 Juniper Mist 백엔드를 호출합니다.
?signature=signature&expires=expires&token=token&optional
-
expires – 권한 부여 URL이 유효할 때까지의 epoch 타임스탬프입니다.
-
예: 1768587994 (즉, 권한 부여 URL은 2026년 1월 16일 오후 6:26:34 UTC에 만료됩니다.)
-
-
token – 형식이 wlan_id/ap_mac/client_mac/authorize_min/0/0/0인 base64 문자열
-
예: be22bba7-8e22-e1cf-5185-b880816fe2cf/5c5b35001234/d58f6bb4c9d8/480/0/0/0
-
-
signature – sha1을 해시 알고리즘으로, 게스트 WLAN의 API 암호를 키로 사용하는 해시된 값의 base64 문자열입니다. expires=expires&token=token&optional 형식입니다.
-
예: J7VJlf2Zlcs%2BOxhVxCf8hL0XYC0%3D
-
-
선택 사항 – 선택적 게스트 세부 정보 및 권한 부여 후 사용자가 전달되는 URL로, forward=url&name=name&email=email&company=company&field1=field1&field2=field2&field3=field3&field4=field4 형식입니다.
참고: 모든 매개변수 값이 base64로 전달되었는지 확인합니다.
-
예: forward=http%3A%2F%2Fwww.mist.com%2F
-
-
- 게스트 인증을 위해 Juniper Mist를 호출하도록 인증 페이지를 구성합니다. 최종 권한 부여 URL은 다음과 같습니다.
http://portal.mist.com/authorize?signature=J7VJlf2Zlcs%2BOxhVxCf8hL0XYC0%3D&expires=1768587994&token=YmUyMmJiYTctOGUyMi1lMWNmLTUxODUtYjg4MDgxNmZlMmNmLzVjNWIzNTAwMTIzNC9kNThmNmJiNGM5ZDgvNDgwLzAvMC8w&forward=http%3A%2F%2Fwww.mist.com%2F
- 디바이스를 연결하고 인증을 시도하여 외부 캡티브 포털을 테스트합니다.
인증을 위해 디바이스를 Juniper Mist 포털로 리디렉션해야 합니다. 인증에 성공하면 사용자는 외부 캡티브 포털 코드에 정의된 URL로 리디렉션됩니다.
참고:라이브 포털에 사용합니다
/authorize
. 테스트 목적으로 을(를) 사용할/authorize-test
수 있으며, 이 경우 추가 정보 정보에 제공된 더미 예제 값이 필요합니다.