Esta es la documentación para el apretón de manos de autenticación Authentication JWT. Los pasos para configurar el apretón de manos de JWT Personalization Handshake son ligeramente diferentes.

Si no tienes un panel de control, o si quieres mantener tu panel y documentos completamente separados, puedes usar tu propio flujo de inicio de sesión para autenticar usuarios a través de un JWT en la URL.

Implementación

1

Genera una clave privada

Ve a tu dashboard settings y genera una clave privada. Almacena esta clave en un lugar seguro donde pueda ser accedida por tu backend.

2

Crea un flujo de inicio de sesión

Crea un flujo de inicio de sesión que haga lo siguiente:

  • Autenticar al usuario
  • Crear un JWT que contenga la información del usuario autenticado en el formato User
  • Firmar el JWT con la clave secreta, usando el algoritmo EdDSA
  • Crear una URL de redirección de vuelta a la ruta /login/jwt-callback de tus documentos, incluyendo el JWT como el hash
3

Configura tus ajustes de autenticación

Vuelve a tu dashboard settings y agrega la URL de inicio de sesión a tus ajustes de autenticación.

Ejemplo

Quiero configurar la autenticación para mis documentos alojados en docs.foo.com. Quiero que mis documentos estén completamente separados de mi panel de control (o no tengo un panel de control en absoluto).

Para configurar la autenticación con Mintlify, voy a mi panel de Mintlify y genero un secreto JWT. Creo una URL web https://foo.com/docs-login que inicia un flujo de inicio de sesión para mis usuarios. Al final de este flujo de inicio de sesión, una vez que he verificado la identidad del usuario, creo un JWT que contiene los datos personalizados del usuario según la especificación de Mintlify. Uso una biblioteca JWT para firmar este JWT con mi secreto de Mintlify, creo una URL de redirección de la forma https://docs.foo.com/login/jwt-callback#{SIGNED_JWT}, y redirijo al usuario.

Luego voy a la configuración del panel y ingreso https://foo.com/docs-login en el campo URL de inicio de sesión.

Así es como podría verse el código:

import * as jose from 'jose';
import { Request, Response } from 'express';

const TWO_WEEKS_IN_MS = 1000 * 60 * 60 * 24 * 7 * 2;

const signingKey = await jose.importPKCS8(process.env.MINTLIFY_PRIVATE_KEY, 'EdDSA');

export async function handleRequest(req: Request, res: Response) {
  const user = {
    expiresAt: Math.floor((Date.now() + TWO_WEEKS_IN_MS) / 1000), // 2 week session expiration
    groups: res.locals.user.groups,
    content: {
      firstName: res.locals.user.firstName,
      lastName: res.locals.user.lastName,
    },
  };

  const jwt = await new jose.SignJWT(user)
    .setProtectedHeader({ alg: 'EdDSA' })
    .setExpirationTime('10 s') // 10 second JWT expiration
    .sign(signingKey);

  return res.redirect(`https://docs.foo.com/login/jwt-callback#${jwt}`);
}

Redirigiendo usuarios no autenticados

Cuando un usuario no autenticado intenta acceder a una página específica, Mintlify preserva su destino previsto a través de un flujo de redirección:

  1. El usuario intenta visitar una página determinada (por ejemplo, /quickstart)

  2. Mintlify los redirige a tu URL de inicio de sesión y agrega el destino original (relativo) como un parámetro de consulta redirect

Example:

Después de una autenticación exitosa, puedes incluir este mismo parámetro redirect en tu URL de devolución de llamada JWT para enviar a los usuarios a su destino previsto: https://docs.foo.com/login/jwt-callback?redirect=%2Fquickstart#{SIGNED_JWT}