Integración multitenant (inicio de sesión único)

Prefacio

La multitenancia es un enfoque común para cualquier aplicación basada en la nube. La estrategia de instancia única para distintas organizaciones siempre es más eficiente en términos de mantenimiento y costes.

El componente Editor tiene como objetivo ayudar a crear y gestionar la representación visual de un mapa de asientos. Este documento cubre todos los casos en los que una plataforma de ticketing ofrece multitenancia y el modelo de integración deseado debe admitir ese tipo de escenario.

Objetivos

El objetivo principal es admitir modelos multitenant de forma fluida entre dos plataformas. permite organizar espacios de trabajo separados para distintas organizaciones. Para alcanzar los objetivos existentes, necesitamos implementar la funcionalidad de SSO entre las dos plataformas.

Los tenants pueden representarse como organizaciones o clientes en términos del software de ticketing.

Integración

Definiciones

Aquí y en adelante, vamos a usar los siguientes términos:

  • Ticketing Platform - TP - es una plataforma a integrar
  • Seatmap.pro - SMP - la plataforma que consta de dos componentes principales:
    • Editor - aplicación de UI para editar esquemas
    • Booking - componente de API de la plataforma que gestiona la autenticación y la gestión de organizaciones

Modelo

Vinculamos a los usuarios a un tenant específico, de modo que definimos un ámbito o restricción para separar el acceso entre dos o más organizaciones.

model

Básicamente, un único tenant u organización puede contener varios usuarios.

Flujo principal

Consideremos el escenario inicial en el que un usuario autenticado en TP intenta abrir la UI de SMP Editor. Para omitir el paso de autenticación en el lado de SMP, el usuario debe tener tokens de autenticación. Para conectar las dos plataformas, necesitamos llevar a cabo los siguientes pasos:

  1. Para sincronizar las organizaciones, TP identifica la organización del usuario actual y comprueba que ya existe en el lado de SMP Booking y tiene algún ID.
    • En caso de que una organización no exista en el lado de SMP Booking, TP debe crearla primero con la API de gestión de organizaciones
  2. Cuando se conoce el id de la organización, TP está lista para obtener los tokens de autenticación con el método autoLogin
  3. Como resultado de autoLogin, TP puede redirigir o abrir la UI de SMP Editor con el token y el refreshToken obtenidos

sequence

Crear una organización

Para crear una organización mediante programación, necesitas llamar a la management API en el lado de SMP Booking:

POST /api/private/management/v2.0/organizations/ HTTP/1.1
Host: {BOOKING_HOST}
Content-Type: application/json
Authorization: Bearer {YOUR_ACCESS_TOKEN}
Content-Length: 164

{
    "organization": {
        "name": "Organization Name"
        // other organization properties
    },
    "user": {
        "email": "jd@seatmap.pro",
        "firstName": "John",
        "lastName": "Doe"
        // other user properties
    }
}

Este endpoint requiere una autenticación adecuada mediante un bearer token. La respuesta contendrá la organización creada con su ID, que necesitarás para operaciones posteriores.

Solicitud de inicio de sesión automático

El método de inicio de sesión automático permite obtener una sesión de usuario. Ahora esto lo gestiona el sistema SMP Booking:

POST /api/public/v2.0/autologin/ HTTP/1.1
Host: {BOOKING_HOST}
Content-Type: application/json
Content-Length: 164

{
    "login": "jd@seatmap.pro",
    "firstName": "John",
    "lastName": "Doe",
    "token": "{PRIVATE_KEY}"
}

La respuesta incluirá la siguiente información:

{
  "user": {
    // User information
  },
  "success": true,
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "sessionId": "abc123xyz"
}

Abrir la aplicación Editor

Tras recibir la respuesta de autologin, puedes abrir la aplicación SMP Editor en un iframe añadiendo el token y el refreshToken como parámetros de URL:

<iframe
  src="{EDITOR_HOST}?token={token}&refreshToken={refreshToken}"
  width="100%"
  height="800px"
  frameborder="0"
>
</iframe>

Reemplaza {token} y {refreshToken} por los valores correspondientes de la respuesta de autologin. Esto permite que la aplicación SMP Editor autentique al usuario automáticamente sin requerir pasos de inicio de sesión adicionales.

Ejemplo

Supongamos que necesitas abrir el Editor para un esquema de recinto concreto en la URL https://editor.seatmap.dev/app/venues/2/schemas/150, y recibiste los siguientes tokens de la respuesta de autologin:

  • token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U
  • refreshToken: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJyZWZyZXNoIn0.eBjJJpHLlEVcKkprmYzqmh5hS5Vb5aT1QRYoD-YKfuU

La URL completa para usar en tu iframe sería:

https://editor.seatmap.dev/app/venues/2/schemas/150?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U&refreshToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJyZWZyZXNoIn0.eBjJJpHLlEVcKkprmYzqmh5hS5Vb5aT1QRYoD-YKfuU

Y la implementación completa del iframe sería:

<iframe
  src="https://editor.seatmap.dev/app/venues/2/schemas/150?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U&refreshToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJyZWZyZXNoIn0.eBjJJpHLlEVcKkprmYzqmh5hS5Vb5aT1QRYoD-YKfuU"
  width="100%"
  height="800px"
  frameborder="0"
>
</iframe>