Ir al contenido

Quickstart

Esta guía te lleva de no tener cuenta a un usuario logueado en tu app en cinco minutos. Después tenés tres ramificaciones: integrarlo en serio en tu SaaS, dejar que un agente lo opere, o seguir admin-eando desde el dashboard.

  1. Signup en app.prysmid.com.

    Andá a app.prysmid.com y hacé login con Google o GitHub. No te pedimos tarjeta — el plan Free está sin caducidad y cubre 10k MAU.

  2. Crear tu primer workspace.

    Después del primer login te pedimos un slug (ej: acme). Ese slug se vuelve auth.acme.prysmid.com — el dominio donde tus usuarios harán login. La provisión tarda 60-90 segundos: levantamos una instancia dedicada para tu workspace, configuramos OIDC, branding default y SMTP.

  3. Registrar tu primera app OAuth.

    En el dashboard de tu workspace, andá a Apps → New app. Te pide:

    • Name: Mi SaaS dev
    • Redirect URIs: http://localhost:3000/auth/callback (para desarrollo local) — podés agregar más después
    • Type: Web (server-side) o SPA (browser)

    Recibís un client_id (público) y un client_secret (mostrado una vez — copialo).

  4. Conectar tu app local.

    Tu app habla con Prysm:ID por OIDC estándar. Endpoints:

    Issuer: https://auth.acme.prysmid.com
    Authorization: https://auth.acme.prysmid.com/oauth/v2/authorize
    Token: https://auth.acme.prysmid.com/oauth/v2/token
    UserInfo: https://auth.acme.prysmid.com/oidc/v1/userinfo
    JWKS: https://auth.acme.prysmid.com/oauth/v2/keys

    Cualquier librería OIDC seria sirve. Ejemplos:

    import { Issuer } from 'openid-client';
    const issuer = await Issuer.discover('https://auth.acme.prysmid.com');
    const client = new issuer.Client({
    client_id: process.env.PRYSMID_CLIENT_ID,
    client_secret: process.env.PRYSMID_CLIENT_SECRET,
    redirect_uris: ['http://localhost:3000/auth/callback'],
    response_types: ['code'],
    });
  5. Probar el login.

    Iniciá tu app local y andá a tu flow de login. Tu app redirige a auth.acme.prysmid.com, el usuario ingresa email + password (o se registra), y vuelve a tu callback con un authorization_code. Lo intercambiás por un id_token JWT que contiene sub, email, name.

    Ese sub es el identificador estable del usuario en tu workspace. Persistilo asociado al usuario en tu base.

Tres direcciones según qué te interesa profundizar:

El workspace queda en provisioning más de 5 minutos. Algo falló durante la provisión. Andá a Settings → Status del workspace para ver dónde se trabó. Si seguís bloqueado, escribinos: el state es recoverable sin perder el slug.

Mi app dice redirect_uri_mismatch. La URI exacta que mandás en el authorize debe coincidir con alguna registrada en Apps → tu app → Redirect URIs. Trailing slashes cuentan.

El id_token viene sin email. Pedí el scope email además de openid profile. Algunas librerías por default solo piden openid.

Necesito self-hostear esto. Podés. La base es open source: exportás tu instancia en formato estándar y la levantás en tu propia infraestructura. Ver Modelo de seguridad / portabilidad.