Tokenized: Parámetros de HotelRSV encriptados con JWT
Tokenized: Parámetros de HotelRSV encriptados con JWT
HotelRSV permite pasar datos encriptados usando el protocolo
JSON Web Tokens , basado sobre método estándar de la industria
RFC 7519 para representar Declaraciones o
Claims de forma segura entre dos partes.
Esta es una forma avanzada opcional en caso que su organización requiera pasar parámetros encriptados (claims) hacia el motor de reservas, como pueden ser credenciales de usuario en un contexto de Inicio de sesión único (Single Sign On o SSO).
Es necesario acordar entre su Web Master y el Staff de Soporte de Novohit los datos (claims) que se comunicarán en el objeto JSON lo cual se hace caso por caso mediante ticket en
help.novohit.com , pero a continuación se explica el proceso general de implementación del esquema.
Esquema de Implementación
Perspectiva General
El esquema de intercambio de JWT requiere de los siguientes componentes:
2.- Un esquema lado servidor (implementado y controlado por su organización o su webmaster) donde se realice codificación del Web Token en formato JSON. En particular se requerirán estos subcomponentes:
- Los datos del payload (claims) que se comunicarán en al motor de reservas HotelRSV, los cuales se acuerdan mediante ticket en
help.novohit.com . A modo de ejemplo:
- {
- "iss": "com-organizacion-acme",
- "aud": "app.hotelrsv.com",
- "iat": 1628793662,
- "exp": 1628793962,
- "jti": "cbc0d1ee1b337e803bfb2fb6ce759a81",
- "username": "johndoe",
- "id_hotel": "100"
- }
- El binomio de llave privada y su correspondiente llave pública que se debe usar para encriptar el JSON en formato JWT. Para esto ver la sección Servidor más abajo. La llave pública que nos enviarán vía ticket y que instalaremos en nuestro servidor para validar los datos encriptados en el JWT.
- La aplicación en el servidor que ustedes realizarán para generar el JWT.
- La aplicación o código JavaScript para que incluyan en el DOM el atributo data-hotelrsv-tokenized o en el URL el parámetro tokenized. A modo de ejemplo, a continuación se muestra un botón de reservar cuyo atributo data-hotelhotelrsv-tokenized se genera dinámicamente:
- <a href="#" id="theRsvButton" data-hotelrsv-show-other-rooms="1" class="rsv-app-launcher rsv-mobile-launcher" data-hotelrsv-tokenized="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" >Book</a>
Llave Privada y Llave Pública
Generar el Binomio
Se debe generar un binomio de llaves con algoritmo RSA con mínimo 2048 bits. Puede ser también 4096, mientras más grande la llave, mayor será la información del signature del token, pero 2048 es suficiente.
Si tiene acceso a Shell en Linux
Navegar al directorio donde se almacenarán las llaves:
Generar la llave privada:
- # openssl genrsa -out myorganization-jwt-private.pem 2048
Generar la llave pública
- # openssl rsa -pubout -in myorganization-jwt-private.pem -out myorganization-jwt-public.pem
Llave Privada
Debe resguardar la llave privada en todo momento! Es su responsabilidad!
Novohit nunca solicitará la llave privada
Llave Pública
Debe compartir con Novohit
solamente la llave pública mediante ticket por
help.novohit.com .
Aplicación lado Servidor para generar JWT
Queda a criterio de su desarrollador Web el cómo implementar la generación de JWT. Por ejemplo, si usan Wordpress, pueden desarrollar un script en PHP para que reciba llamadas dinámicas AJAX y genere el Token.
Ejemplo de aplicación en PHP
- <?php
- require_once __DIR__ . '/vendor/autoload.php';
- use Firebase\JWT\JWT;
- //-- when keys are loaded from file
- $passphrase = '';
- $privateKeyFile = __DIR__ . '/jwt-private.pem';
- $privateKey = openssl_pkey_get_private(
- file_get_contents($privateKeyFile),
- $passphrase
- );
- $publicKeyFile = __DIR__ . '/jwt-public.pem';
- $publicKey = file_get_contents($publicKeyFile);
- $iat = time();
- $interval = 5; //-- minutes
- $jti = bin2hex(random_bytes(16));
- $data = array(
- 'iss' => 'com-organizacion-acme',
- 'aud' => 'app.hotelrsv.com',
- 'iat' => $iat,
- 'exp' => $iat + $interval * 60,
- 'jti' => $jti,
- 'hotelrsv_id_h' => 100,
- 'username' => 'johndoe',
- 'other_fields' => 'foo bar'
- );
- $token = JWT::encode($data, $privateKey, 'RS256');
- $aToken = array('token' => $token);
- header('Content-Type: application/json');
- echo json_encode($aToken);
JavaScript para solicitar el JWT e inyectarlo en el DOM
Usted puede adicionar el token dinámicamente en cualquier Botón de Reserva simplemente adicionando el atributo data-hotelrsv-tokenized al elemento HTML.
Puesto que el token tiene validez de máximo 12 minutos, se recomienda generarlo dinámicamente a cada llamada a un botón de reservar.
Para esto pusimos a su disposición una “Interface Gancho” o Hook en Javascript llamada nvhHookBeforeRsvAppLauncher que le permite ejecutar Javascript antes de que se dispare el motor de reservaciones. Es allí donde puede definir dinámicamente la llamada a su aplicación servidor para generar el JWT dinámicamente.
Asegúrese de realizar la llamada después de la instalación de
hotelrsv.min.js A continuación un ejemplo basado en jQuery y AJAX que adiciona el atributo data-hotelrsv-tokenized a un botón con ID theRsvButton :
- //...
- <script>
- function nvhHookBeforeRsvAppLauncher() {
- jQuery.ajax({
- type: 'POST',
- url: ' https://api.yourserver.com/jwt/buildToken.php',
- success: function(data) {
- console.log(data.token);
- jQuery("#theRsvButton").attr("data-hotelrsv-tokenized",data.token);
- }
- });
- }
- </script>
- //...
- <body>
- //...
- <a href="#" id="theRsvButton" class="rsv-app-launcher rsv-mobile-launcher">Book</a>
De esta manera, cuando el usuario final da click en el botón id="theRsvButton" cuya clase es class="rsv-app-launcher" (ver Botones de Reservar – Llamadas de Acción ) se ejecutará primero la función nvhHookBeforeRsvAppLauncher y al recibir el JWT del servidor, se insertará el atributo data-hotelrsv-tokenized al botón de reserva y se ejecutará el motor de reservaciones. hotelrsv.min.js se encargará automáticamente de pasara el valor del atributo data-hotelrsv-tokenized a la aplicación.
Related Articles
Tipos de Tarifa HotelRSV
Tipos de Tarifa Los Tipos de Tarifa permiten crear estructuras tarifarias de diferente tipo: definir tarifas según el Tipo de Alimentación, Por Habitación, Por Personas. En HotelRSV: Configuraciones → General → Tipos de Tarifa Para editar en Novohit, ...
Integrar PayPal con hotelRSV
hotelRSV le permite aceptar pagos de sus reservaciones con PayPal. Para configurar PayPal con HotelRSV, debe realizar los siguientes pasos: 1. Activar una Cuenta PayPal de Negocios Primero debe crear o habilitar una cuenta PayPal de tipo Empresas ...
Conexión con TripAdvisor con TripConnect
Conexión con TripAdvisor con TripConnect Gracias a la nueva conexión con TripAdvisor, su pagina web estará conectada con 260 millones de usuarios al mes. Verifique si Califica Verifiquen con su agente de Tripadvisor o bien en la pagina ...
Reporte y estadísticas de reservaciones con hotelRSV en Novohit
Reporte y estadísticas de reservaciones con hotelRSV en Novohit Al igual que en hotelRSV, usted puede obtener el reporte de reservaciones en Novohit® segmentado por, para ello realice los siguientes pasos: Seleccione Front Office → Reservaciones → ...
Dispositivos y navegadores compatibles con hotelRSV
HotelRSV usa tecnología HTML5 estándar compatible con la gran mayoría de dispositivos cuyos navegadores soporten HTML5. Para más información, vea https://caniuse.com