Tokenized: Parámetros de HotelRSV encriptados con JWT

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:
  1. {
  2.   "iss": "com-organizacion-acme",
  3.   "aud": "app.hotelrsv.com",
  4.   "iat": 1628793662,
  5.   "exp": 1628793962,
  6.   "jti": "cbc0d1ee1b337e803bfb2fb6ce759a81",
  7.   "username": "johndoe",
  8.   "id_hotel": "100"
  9. }
- 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:
  1. <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.
Se puede usar un servicio Web para generar Binomio Llave Privada/Pública como https://travistidwell.com/jsencrypt/demo/. Tome en cuenta que es su responsabilidad salvaguardar la llave privada en todo momento.
Si tiene acceso a Shell en Linux
Navegar al directorio donde se almacenarán las llaves:
  1. # cd /path/to/keystorage
Generar la llave privada:
  1. # openssl genrsa -out myorganization-jwt-private.pem 2048
Generar la llave pública
  1. # 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
  1. <?php
  2. require_once __DIR__ . '/vendor/autoload.php';

  3. use Firebase\JWT\JWT;

  4. //-- when keys are loaded from file
  5. $passphrase = '';
  6. $privateKeyFile = __DIR__ . '/jwt-private.pem';
  7. $privateKey = openssl_pkey_get_private(
  8.     file_get_contents($privateKeyFile),
  9.     $passphrase
  10. );
  11. $publicKeyFile = __DIR__ . '/jwt-public.pem';
  12. $publicKey = file_get_contents($publicKeyFile);

  13. $iat = time();
  14. $interval = 5;  //-- minutes
  15. $jti = bin2hex(random_bytes(16));

  16. $data = array(
  17.     'iss' => 'com-organizacion-acme',
  18.     'aud' => 'app.hotelrsv.com',
  19.     'iat' => $iat,
  20.     'exp' => $iat + $interval * 60,
  21.     'jti' => $jti,
  22.     'hotelrsv_id_h' => 100,
  23.     'username' => 'johndoe',
  24.     'other_fields' => 'foo bar'
  25. );

  26. $token = JWT::encode($data, $privateKey, 'RS256');
  27. $aToken = array('token' => $token);
  28. header('Content-Type: application/json');
  29. 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 :
  1. //...
  2. <script> 
  3. function nvhHookBeforeRsvAppLauncher() {
  4.     jQuery.ajax({
  5.         type: 'POST',
  6.         url: ' https://api.yourserver.com/jwt/buildToken.php',
  7.         success: function(data) {
  8.             console.log(data.token);
  9.             jQuery("#theRsvButton").attr("data-hotelrsv-tokenized",data.token);
  10.         }
  11.     });
  12. }
  13. </script>
  14. //...
  15. <body>
  16. //...
  17. <a href="#" id="theRsvButton" class="rsv-app-launcher rsv-mobile-launcher">Book</a>



Asegúrese que el servidor que atiende llamadas para construir token (en el ejemplo https://api.miservidor.com/jwt/construirToken.php) cumpla con requisitos CORS.
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