# Autenticación

## Descripción General
**La autenticación** define cómo menta identifica a un usuario durante las interacciones de reventa. La identidad del usuario es necesaria para:

* Recuperar el inventario de entradas correcto para la reventa
* Asegurar que solo usuarios legítimos puedan listar o comprar entradas
* Hacer cumplir las reglas de reventa vinculadas a cuentas de usuario
* Garantizar operaciones de reventa seguras y conformes a las normas

**menta tech** admite tres mecanismos de autenticación. A diferencia de otras secciones, estos mecanismos **no son exclusivos**.
* La mayoría de las integraciones implementan tanto **Login Trust** como **Login Force** juntos.
* Si ninguno está disponible, menta proporciona un método de autenticación de respaldo utilizando **OTP**.

## Por qué importa la autenticación

La autenticación asegura que:
* Las acciones de reventa estén vinculadas al usuario correcto.
* Solo los propietarios reales puedan listar entradas.
* Solo los usuarios autenticados puedan comprar entradas.
* Se cumplan las reglas de identidad del sistema de venta de entradas primario.
* Las operaciones posteriores (entrega, reportes, cumplimiento) permanezcan consistentes.

**Se requiere una identidad de usuario válida y verificada para cada acción de reventa.**
---

## Modelos de Autenticación — Comparación

{% table highlight-first=true %}
| Modelo | Propósito | Dónde se Aplica | Notas |
| :--- | :--- | :--- | :--- |
| **Login Trust** | El partner informa a menta quién es el usuario autenticado. | Se usa siempre que la reventa es accedida por un usuario logueado. | Proporciona la experiencia más fluida. |
| **Login Force** | Requiere que los usuarios que compran en reventa inicien sesión o creen una cuenta. | Se aplica en flujos de compra. | Asegura que todos los compradores de reventa tengan una cuenta del partner. |
| **Autenticación OTP de menta** | menta autentica a los usuarios usando un código de un solo uso. | Se usa solo cuando Login Trust/Force no están implementados. | Adecuado para plataformas de invitados o sin cuentas. |
{% /table %}

---

{% conditionaltabs id="tabs-1765468408434" %}
{% tab label="Login Trust" %}
## Login Trust

### Descripción

En Login Trust, el usuario ya está autenticado en tu plataforma (web o app). En este caso, cada vez que generes una URL para lleva a tu usuario a un flujo de compra o venta administrado por menta tech, deberás especificar la identidad del usuario, sea correo electrónico ó número de teléfono, en la creación de la URL vía el endpoint HTTP.


{% diagram type="sequence" height="400px" %}
{
  "nodes": [
    {
      "id": "actor-1",
      "type": "sequence-actor",
      "position": {
        "x": 36.66666666666666,
        "y": 30.063149335941404
      },
      "data": {
        "label": "Usuario",
        "accentColor": "#8b5cf6",
        "lifelineHeight": 320
      }
    },
    {
      "id": "actor-2",
      "type": "sequence-actor",
      "position": {
        "x": 260,
        "y": 30
      },
      "data": {
        "label": "Tu Plataforma",
        "accentColor": "#f97316",
        "lifelineHeight": 320
      }
    },
    {
      "id": "actor-3",
      "type": "sequence-actor",
      "position": {
        "x": 501.1078337971647,
        "y": 28.666666666666664
      },
      "data": {
        "label": "menta tech",
        "accentColor": "#3b82f6",
        "lifelineHeight": 320
      }
    },
    {
      "id": "msg-1",
      "type": "sequence-message",
      "position": {
        "x": -1.6666666666666856,
        "y": 101.49999999999999
      },
      "data": {
        "label": "Desea comprar o vender"
      }
    },
    {
      "id": "msg-1765910935647",
      "type": "sequence-message",
      "position": {
        "x": 182.94174681528432,
        "y": 160.15989697777204
      },
      "data": {
        "label": "Genera URL de compra o venta \nespecificando el correo electrónico\ndel usuario"
      }
    },
    {
      "id": "msg-1765911134978",
      "type": "sequence-message",
      "position": {
        "x": 450.8424675717367,
        "y": 246.82261851691868
      },
      "data": {
        "label": "Devuelve URL con un token\nde sesión de un único uso",
        "isReturn": true
      }
    },
    {
      "id": "msg-1765911217230",
      "type": "sequence-message",
      "position": {
        "x": -20.236230318487458,
        "y": 322.26699190089283
      },
      "data": {
        "label": "Ingresa a comprar o vender\nautomáticamente autenticado"
      }
    }
  ],
  "edges": [
    {
      "id": "edge-1765910902184",
      "source": "msg-1",
      "target": "actor-2",
      "sourceHandle": null,
      "targetHandle": "h-2",
      "animated": true,
      "style": {
        "stroke": "#9ca3af",
        "strokeWidth": 1.5
      },
      "markerEnd": {
        "type": "arrowclosed",
        "color": "#9ca3af",
        "width": 16,
        "height": 16
      }
    },
    {
      "id": "edge-1765910958910",
      "source": "msg-1765910935647",
      "target": "actor-3",
      "sourceHandle": null,
      "targetHandle": "h-8",
      "animated": true,
      "style": {
        "stroke": "#9ca3af",
        "strokeWidth": 1.5
      },
      "markerEnd": {
        "type": "arrowclosed",
        "color": "#9ca3af",
        "width": 16,
        "height": 16
      }
    },
    {
      "id": "edge-1765911239535",
      "source": "msg-1765911217230",
      "target": "actor-3",
      "sourceHandle": null,
      "targetHandle": "h-20",
      "animated": true,
      "style": {
        "stroke": "#9ca3af",
        "strokeWidth": 1.5
      },
      "markerEnd": {
        "type": "arrowclosed",
        "color": "#9ca3af",
        "width": 16,
        "height": 16
      }
    },
    {
      "id": "edge-1765939085504",
      "source": "actor-1",
      "target": "msg-1765911134978",
      "sourceHandle": "s-14",
      "targetHandle": null,
      "animated": true,
      "style": {
        "stroke": "#9ca3af",
        "strokeWidth": 1.5
      },
      "label": "Recibe URL",
      "markerStart": {
        "type": "arrowclosed",
        "color": "#9ca3af",
        "width": 16,
        "height": 16
      },
      "data": {
        "isReversed": true
      }
    }
  ]
}
{% /diagram %}


Los campos comunes incluyen:

- userId (identificador único preferido)
- email o phone number (dependiendo del modelo de identidad del partner)

menta no realiza autenticación adicional. La autenticación del partner es totalmente confiable.

### Cuándo usarlo

- Siempre que la experiencia de reventa sea accedida por usuarios autenticados.
- Cuando el partner tiene un sistema estable de inicio de sesión/sesión.
- Cuando se requiere una experiencia de usuario fluida.

### Características clave

- Los usuarios nunca ven un aviso de inicio de sesión adicional.
- La identidad es controlada enteramente por el partner.
- Ideal para experiencias de reventa profundamente integradas.
{% /tab %}
{% tab label="Login Force" %}
## Login Force

### Descripción

Login Force asegura que todos los compradores de reventa tengan una cuenta válida en la plataforma del partner.

Si un usuario inicia una compra de reventa sin estar autenticado:

- menta lo redirige a la página de inicio de sesión o creación de cuenta del partner.
- El usuario inicia sesión o crea una cuenta.
- El partner redirige al usuario de vuelta a menta.
- El usuario completa la compra autenticado.

Esto asegura que el comprador tenga una cuenta válida en el sistema primario antes de adquirir una entrada.

{% diagram type="sequence" height="400px" %}
{
  "nodes": [
    {
      "id": "actor-1",
      "type": "sequence-actor",
      "position": {
        "x": 7.3333333333333215,
        "y": 30.063149335941404
      },
      "data": {
        "label": "Usuario",
        "accentColor": "#8b5cf6",
        "lifelineHeight": 320
      }
    },
    {
      "id": "actor-2",
      "type": "sequence-actor",
      "position": {
        "x": 518.6666666666666,
        "y": 30.063149335941404
      },
      "data": {
        "label": "Tu Plataforma",
        "accentColor": "#f97316",
        "lifelineHeight": 320
      }
    },
    {
      "id": "actor-3",
      "type": "sequence-actor",
      "position": {
        "x": 269.10783379716474,
        "y": 30.063149335941404
      },
      "data": {
        "label": "menta tech",
        "accentColor": "#3b82f6",
        "lifelineHeight": 320
      }
    },
    {
      "id": "msg-1",
      "type": "sequence-message",
      "position": {
        "x": -1.6666666666666856,
        "y": 88.16666666666666
      },
      "data": {
        "label": "Desea comprar"
      }
    },
    {
      "id": "msg-1767819209574",
      "type": "sequence-message",
      "position": {
        "x": 174.56434292996,
        "y": 156.30384645397356
      },
      "data": {
        "label": "Durante el proceso de compra es enviado\na tu plataforma para autenticarse"
      }
    },
    {
      "id": "msg-1767819399705",
      "type": "sequence-message",
      "position": {
        "x": -50.70649528044395,
        "y": 207.69615354602647
      },
      "data": {
        "label": "   Completa autenticación \n(registro o inicio de sesión)"
      }
    },
    {
      "id": "msg-1767819586656",
      "type": "sequence-message",
      "position": {
        "x": 453.2096641029424,
        "y": 271.9465133491845
      },
      "data": {
        "label": "Generas un One Time Token\nusando la API de menta tech"
      }
    },
    {
      "id": "msg-1767819693042",
      "type": "sequence-message",
      "position": {
        "x": 408.69697569105756,
        "y": 348.5005142710487
      },
      "data": {
        "label": "Rediriges al usuario al returnUrl adicionando el\noneTimeToken a la URL"
      }
    }
  ],
  "edges": [
    {
      "id": "edge-1767819166606",
      "source": "msg-1",
      "target": "actor-3",
      "sourceHandle": null,
      "targetHandle": "h-1",
      "animated": true,
      "style": {
        "stroke": "#9ca3af",
        "strokeWidth": 1.5
      },
      "markerEnd": {
        "type": "arrowclosed",
        "color": "#9ca3af",
        "width": 16,
        "height": 16
      },
      "data": {
        "hadArrow": true
      }
    },
    {
      "id": "edge-1767819434001",
      "source": "msg-1767819399705",
      "target": "actor-2",
      "sourceHandle": null,
      "targetHandle": "h-11",
      "animated": true,
      "style": {
        "stroke": "#9ca3af",
        "strokeWidth": 1.5
      },
      "markerEnd": {
        "type": "arrowclosed",
        "color": "#9ca3af",
        "width": 16,
        "height": 16
      }
    },
    {
      "id": "edge-1767819464235",
      "source": "actor-1",
      "target": "msg-1767819209574",
      "sourceHandle": "s-7",
      "targetHandle": null,
      "animated": true,
      "style": {
        "stroke": "#9ca3af",
        "strokeWidth": 1.5
      },
      "markerStart": {
        "type": "arrowclosed",
        "color": "#9ca3af",
        "width": 16,
        "height": 16
      },
      "data": {
        "isReversed": true,
        "hadArrow": true
      }
    },
    {
      "id": "edge-1767819608493",
      "source": "actor-3",
      "target": "msg-1767819586656",
      "sourceHandle": "s-16",
      "targetHandle": null,
      "animated": true,
      "style": {
        "stroke": "#9ca3af",
        "strokeWidth": 1.5
      },
      "markerStart": {
        "type": "arrowclosed",
        "color": "#9ca3af",
        "width": 16,
        "height": 16
      },
      "data": {
        "isReversed": true
      }
    },
    {
      "id": "edge-1767819721605",
      "source": "actor-1",
      "target": "msg-1767819693042",
      "sourceHandle": "s-22",
      "targetHandle": null,
      "animated": true,
      "style": {
        "stroke": "#9ca3af",
        "strokeWidth": 1.5
      },
      "markerStart": {
        "type": "arrowclosed",
        "color": "#9ca3af",
        "width": 16,
        "height": 16
      },
      "data": {
        "isReversed": true
      }
    }
  ]
}
{% /diagram %}

### Implementación

#### Detalle del Flujo

1. **El usuario es dirigido al inicio de sesión**: Durante el flujo de compra, menta redirige al usuario a la URL de inicio de sesión/registro de tu plataforma, incluyendo un parámetro de consulta `returnTo` que apunta de vuelta a la página de menta donde el usuario se encontraba.
   Ejemplo de URL: `https://tuplataforma.com/login?returnTo=https://mentatech.io/sell/2738`

2. **El usuario completa la autenticación**: El usuario inicia sesión o se registra en tu plataforma.

3. **Tu plataforma solicita un One Time Token**: Tras la autenticación exitosa, tu plataforma llama a la API de menta tech para obtener un token de sesión de un solo uso para ese usuario.

4. **menta emite el token**: menta tech devuelve un token de sesión de un solo uso en la respuesta.

5. **Tu plataforma redirige al usuario de vuelta**: Tu plataforma redirige al usuario a la URL `returnTo`, agregando el token como parámetro de consulta `oneTimeToken`.
   Ejemplo de redirección: `https://mentatech.io/sell/2738?oneTimeToken=abc123xyz456`

6. **El usuario continúa en menta**: El usuario retoma el flujo de compra en menta, ahora completamente autenticado.

#### Referencia de API

**Endpoint:** `GET /v1/auth/oneTimeToken`
**Base URL:** `https://api.mentatech.io`

**Headers:**

| Header | Valor | Obligatorio |
| :--- | :--- | :--- |
| Authorization | your_mentatech_apikey | Sí |

**Parámetros de consulta (Query Parameters):**

| Parámetro | Descripción | Obligatorio |
| :--- | :--- | :--- |
| user | Dirección de correo electrónico del usuario que se autenticó exitosamente en tu plataforma. | Sí |

**Ejemplo de solicitud:**

`GET https://api.mentatech.io/v1/auth/oneTimeToken?user=johndoe@email.com`

**Ejemplo de respuesta:**

```json
{
  "data": "eyJlbWFpbCI6InVzZXJAZW1haWwuY29tIiwib3R0IjoiOTg0NDE3NDU0MTYiLCJ1c2VkIjpmYWxzZSwidGlja2V0U2VsbGVySWQiOiIyIiwiX2lkIjoiNjZmNDZkN2ZkMGQ0NTMzMGQxMzdhMzhiIn0="
}
```

> **Importante:** El `oneTimeToken` es válido solo por un corto período de tiempo y debe usarse inmediatamente después de ser emitido. Además, solo se puede usar una vez.

### Cuándo usarlo

- Siempre recomendado en flujos de compra de reventa.
- Cuando la identidad del comprador debe estar vinculada a una cuenta de la plataforma principal.
- Cuando los procesos posteriores (entrega, reportes, CRM, asignación de QR) requieren usuarios autenticados.

### Características clave

- Impone la creación de cuenta o inicio de sesión para todos los compradores.
- Previene compras anónimas o de invitados.
- Asegura que los compradores de reventa existan dentro del ecosistema del partner.
{% /tab %}
{% tab label="Autenticación OTP de menta" %}
## Autenticación OTP de menta

### Descripción
Si el partner no puede soportar Login Trust o Login Force, menta autentica a los usuarios a través de una contraseña de un solo uso enviada a su correo electrónico o número de teléfono.

**Flujo:**
1. El usuario ingresa su correo electrónico o teléfono.
2. menta envía un código de verificación temporal.
3. El usuario ingresa el código.
4. menta autentica la sesión.

### Cuándo usarlo
* El partner no tiene cuentas de usuario.
* El partner no puede compartir la identidad autenticada con menta.
* La plataforma utiliza flujos de pago puramente para invitados (guest checkout).

### Características clave
* No requiere integración de autenticación por parte del partner.
* Permite la reventa en plataformas sin cuentas de usuario.
* Introduce más fricción en comparación con Login Trust/Force.
{% /tab %}
{% /conditionaltabs %}





