Usar un portal externo para el acceso de invitados
Habilite un portal externo si desea que los invitados vayan a un portal de inicio de sesión que sus desarrolladores web hayan diseñado en su propio sitio web.
Un portal externo es una página web que los usuarios de WLAN ven después de seleccionar su SSID. Por ejemplo, puede enviar invitados a la página principal de su empresa o a un portal de inicio de sesión que sus desarrolladores web hayan configurado específicamente para su organización.
Para mayor seguridad, puede especificar usuarios autorizados, subredes permitidas y nombres de host permitidos. También puede ingresar una lista de nombres de host para bloquear.
- Vaya a la WLAN.
Nota:
-
Si la WLAN está en una plantilla WLAN, seleccione Organización > inalámbrico | Plantillas WLAN, haga clic en la plantilla y, a continuación, haga clic en la WLAN.
-
Para una WLAN a nivel de sitio, seleccione Sitio > inalámbrico | WLAN y, a continuación, haga clic en WLAN.
-
- En la ventana Editar WLAN, en Portal de invitados, haga clic en Reenviar al portal externo.
- (Opcional) Haga clic en el botón Editar autorización de invitado si desea limitar el acceso a usuarios específicos. A continuación, siga estos pasos:
- En la ventana Invitados autorizados, haga clic en Agregar.
- En la ventana Autorizar invitado, introduzca la dirección MAC del invitado (obligatorio), la información opcional del usuario y el período durante el cual el usuario permanece autorizado.
Nota:
Puede utilizar la opción Buscar cliente para buscar un cliente que ya esté conectado a la WLAN.
- Haga clic en Autorizar en la parte inferior de la ventana Autorizar invitado.
- Repita estos pasos para agregar más invitados a la lista.
- En la ventana Invitados autorizados, haga clic en Agregar.
- Introduzca la URL del portal, empezando por http:// o https://.
Nota:
Utilice los demás campos para ajustar el acceso. Por ejemplo, permitir solo ciertas subredes o nombres de host.
- Active o desactive la casilla Omitir portal invitado/externo en caso de excepción.
Cuando se selecciona esta característica, cada punto de acceso intentará comunicarse con el portal o el IdP, pero si no es accesible, el AP autorizará automáticamente a los invitados a conectarse a la WLAN.
- Haga clic en Guardar en la parte inferior de la ventana Editar WLAN.
Usar archivos PHP y Read-Me para crear su portal externo
- Cree su portal externo consultando los siguientes archivos PHP de ejemplo e información Read-Me.
<?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) $context = sprintf('%s/%s/%s/%d/%d/%d/%d', $wlan_id, $ap_mac, $client_mac, $authorize_min, ); $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); } ?>
Información LéameThis 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
Nota:Sustituya
portal.mist.com
por la URL adecuada del portal de Wi-Fi para invitados según la instancia de nube en la que se creó su organización de Mist. Para buscar la URL del portal Wi-Fi para invitados de su región, consulte la información sobre direcciones IP y puertos de la nube de Mist en la Guía de administración de Juniper Mist. - Para obtener el valor que necesita en
$secret
auth.php, vuelva a abrir la ventana Editar WLAN y copie el secreto de API. - Configure la página de autorización (authme.php) para llamar al back-end de Juniper Mist con los parámetros de cadena de consulta necesarios:
?signature=signature&expires=expires&token=token&optional
-
expires : la marca de tiempo de época hasta la cual la URL de autorización es válida.
-
Por ejemplo: 1768587994 (Esto significa que la URL de autorización caducaría el 16 de enero de 2026 a las 6:26:34 PM UTC).
-
-
token : una cadena base64 con formato: wlan_id/ap_mac/client_mac/authorize_min/0/0/0
-
Por ejemplo: be22bba7-8e22-e1cf-5185-b880816fe2cf/5c5b35001234/d58f6bb4c9d8/480/0/0/0
-
-
signature : una cadena base64 de valores hash que utiliza sha1 como algoritmo hash y el secreto de la API de la WLAN invitada como clave. Esto tendría el siguiente formato: expires=expires&token=token&optional
-
Por ejemplo: J7VJlf2Zlcs%2BOxhVxCf8hL0XYC0%3D
-
-
opcional: los detalles opcionales del invitado y la URL a la que se reenvía al usuario después de la autorización, con el siguiente formato: forward=url&name=name&email=email&company=company&field1=field1&field2=field2&field3=field3&field4=field4
Nota: Asegúrese de que todos los valores de los parámetros se pasan como base64.
-
Por ejemplo: forward=http%3A%2F%2Fwww.mist.com%2F
-
-
- Configure la página de autorización para llamar a Juniper Mist para solicitar autorización de invitado. La URL de autorización final tendría un aspecto similar al siguiente:
http://portal.mist.com/authorize?signature=J7VJlf2Zlcs%2BOxhVxCf8hL0XYC0%3D&expires=1768587994&token=YmUyMmJiYTctOGUyMi1lMWNmLTUxODUtYjg4MDgxNmZlMmNmLzVjNWIzNTAwMTIzNC9kNThmNmJiNGM5ZDgvNDgwLzAvMC8w&forward=http%3A%2F%2Fwww.mist.com%2F
- Pruebe el portal cautivo externo conectando un dispositivo e intentando autenticarse.
El dispositivo debe redirigirse al portal de Juniper Mist para su autorización. Si la autenticación se realiza correctamente, el usuario será redirigido a la URL tal como se define en el código del portal cautivo externo.
Nota:Úselo
/authorize
para el portal en vivo. Para realizar pruebas, puede utilizar/authorize-test
, que requiere los valores de ejemplo ficticios proporcionados en la información del archivo Léame.