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.
El recorrido
Sección titulada «El recorrido»-
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.
-
Crear tu primer workspace.
Después del primer login te pedimos un slug (ej:
acme). Ese slug se vuelveauth.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. -
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 unclient_secret(mostrado una vez — copialo). - Name:
-
Conectar tu app local.
Tu app habla con Prysm:ID por OIDC estándar. Endpoints:
Issuer: https://auth.acme.prysmid.comAuthorization: https://auth.acme.prysmid.com/oauth/v2/authorizeToken: https://auth.acme.prysmid.com/oauth/v2/tokenUserInfo: https://auth.acme.prysmid.com/oidc/v1/userinfoJWKS: https://auth.acme.prysmid.com/oauth/v2/keysCualquier 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'],});from authlib.integrations.starlette_client import OAuthoauth = OAuth()oauth.register(name='prysmid',server_metadata_url='https://auth.acme.prysmid.com/.well-known/openid-configuration',client_id=os.environ['PRYSMID_CLIENT_ID'],client_secret=os.environ['PRYSMID_CLIENT_SECRET'],client_kwargs={'scope': 'openid profile email'},)import "github.com/coreos/go-oidc/v3/oidc"import "golang.org/x/oauth2"provider, _ := oidc.NewProvider(ctx, "https://auth.acme.prysmid.com")conf := &oauth2.Config{ClientID: os.Getenv("PRYSMID_CLIENT_ID"),ClientSecret: os.Getenv("PRYSMID_CLIENT_SECRET"),RedirectURL: "http://localhost:3000/auth/callback",Endpoint: provider.Endpoint(),Scopes: []string{oidc.ScopeOpenID, "profile", "email"},}Ventana de terminal # 1. Redirect a tu usuario a:AUTH_URL="https://auth.acme.prysmid.com/oauth/v2/authorize"echo "$AUTH_URL?client_id=$PRYSMID_CLIENT_ID&redirect_uri=http://localhost:3000/auth/callback&response_type=code&scope=openid%20profile%20email"# 2. En el callback, intercambiá `code` por tokens:curl -X POST https://auth.acme.prysmid.com/oauth/v2/token \-u "$PRYSMID_CLIENT_ID:$PRYSMID_CLIENT_SECRET" \-d "grant_type=authorization_code" \-d "code=$AUTH_CODE" \-d "redirect_uri=http://localhost:3000/auth/callback" -
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 unauthorization_code. Lo intercambiás por unid_tokenJWT que contienesub,email,name.Ese
subes el identificador estable del usuario en tu workspace. Persistilo asociado al usuario en tu base.
Y ahora qué
Sección titulada «Y ahora qué»Tres direcciones según qué te interesa profundizar:
Troubleshooting
Sección titulada «Troubleshooting»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.