Setup guide · Advanced
SSO con OpenID Connect
Permite que tu equipo inicie sesión con el IdP corporativo (Auth0, Okta, Microsoft Entra, Google Workspace, Keycloak). El OTP magic-link sigue funcionando como respaldo.
admin en la org. Si tu plan aún no es Advanced, escribinos desde /demo.Modelo de confianza
Rootproof actúa como relying party (RP). Tu IdP autentica al usuario, firma un ID token y nos devuelve el email verificado vía el endpoint userinfo. Si el email matchea un miembro de tu org (o cumple el allowlist de dominio cuando está activado el auto-provisioning), creamos una sesión org_member_sessioncon el rol correspondiente.
- Protocolo: OpenID Connect (subconjunto de OAuth 2.0).
- Flujo: Authorization Code + PKCE (S256).
- State firmado HMAC-SHA256, single-use, TTL 10 min.
- El client_secret se almacena cifrado en reposo y nunca se devuelve por API.
Paso a paso (genérico)
01 Registrá una app OIDC en tu IdP
Creá una aplicación tipo Web / Regular Web App / Confidential client. Configurá:
- Redirect URI:
https://rootproof.io/api/auth/sso/<tu-slug>/callback - Allowed scopes:
openid email profile - Grant type:
authorization_code(con PKCE) - Response type:
code
- Redirect URI:
02 Copiá las credenciales
De tu IdP necesitás tres valores:
- Issuer URL — la base del IdP, ej.
https://tu-tenant.auth0.com/ - Client ID
- Client Secret
Rootproof descubre los endpoints automáticamente desde
<issuer>/.well-known/openid-configuration. Si tu IdP expone el discovery en otra ruta, podés sobrescribirlo en el formulario.- Issuer URL — la base del IdP, ej.
03 Pegalas en el dashboard de Rootproof
Andá a
/org/<tu-slug>→ tab Perfil → sección Ajustes Enterprise → SSO (OpenID Connect).Llená los campos, guardá, y dejá el checkbox Habilitar SSO activado.
Al guardar, Rootproof valida la discovery URL contra tu IdP. Si responde 404 o devuelve JSON inválido vas a ver un warning — no pasa nada, podés corregir el issuer y volver a guardar.
04 (Opcional) Restringí por dominio + auto-provisión
Dominios permitidos: si dejás vacío, cualquier email autenticado por tu IdP es aceptado. Si listás
universidad.edu, alumnos.universidad.edu, solo esos dominios pueden iniciar sesión.Auto-provisión: cuando está activado, el primer login de un email que matchea el allowlist crea automáticamente un member con el rol por defecto (recomendado:
viewer; promové manualmente aissuer/admindespués).Cuando está desactivado, solo los emails ya invitados desde Equipo pueden iniciar sesión. Cualquier otro email autenticado recibe un 403 educado.
05 Probá el login
En una ventana incógnito, andá a
https://rootproof.io/org/<tu-slug>/login. Deberías ver un botón nuevo "Iniciar sesión con tu proveedor SSO" debajo del input de contraseña.El botón te redirige al IdP, autenticás, y volvés a Rootproof ya logueado como member con el rol que corresponda. El OTP magic-link sigue disponible como respaldo si el IdP tiene un outage.
Recetas por IdP
Auth0
- Dashboard Auth0 → Applications → Create Application → Regular Web Application.
- Settings → Allowed Callback URLs:
https://rootproof.io/api/auth/sso/<slug>/callback - Connections → habilitá las bases de datos / proveedores sociales que querés permitir.
- Copiá Domain (eso es el issuer, prefijalo con
https://y barra final), Client ID y Client Secret.
Okta
- Admin Console → Applications → Create App Integration → OIDC - OpenID Connect → Web Application.
- Sign-in redirect URIs:
https://rootproof.io/api/auth/sso/<slug>/callback - Asignar la app a los grupos / usuarios que pueden entrar.
- Issuer URL:
https://<tu-tenant>.okta.com
Microsoft Entra (Azure AD)
- Entra admin center → App registrations → New registration.
- Redirect URI: Web →
https://rootproof.io/api/auth/sso/<slug>/callback - Certificates & secrets → New client secret.
- API permissions → agregá
openid,email,profile(Microsoft Graph delegated). - Issuer URL:
https://login.microsoftonline.com/<tenant-id>/v2.0
Google Workspace
- Google Cloud Console → APIs & Services → Credentials → Create OAuth client ID.
- Application type: Web application.
- Authorized redirect URI:
https://rootproof.io/api/auth/sso/<slug>/callback - OAuth consent screen: configurá los scopes
openid,email,profile. - Issuer URL:
https://accounts.google.com - En "Dominios permitidos" en Rootproof, listá los dominios de Workspace que querés permitir (clave para no aceptar Gmail personal).
Keycloak / Authentik / cualquier OIDC estándar
Cualquier IdP que exponga /.well-known/openid-configuration y soporte PKCE funciona out-of-the-box. En Keycloak: Clients → Create → Protocol openid-connect, Access Type confidential, Valid Redirect URIs apuntando al callback.
Troubleshooting
Si el callback falla, Rootproof te redirige a /org/<slug>/login?error=<code>. Estos son los códigos:
sso-bad-state → el state expiró (>10 min) o fue manipulado
sso-missing-code → el IdP no devolvió "code" en la callback URL
sso-not-configured → falta issuer / client_id / client_secret en la org
sso-not-member → email autenticado pero no figura en org.members (sin autoprov.)
sso-email-unverified → el IdP reportó email_verified: false
sso-email-domain → email autenticado fuera del allowlist de dominios
sso-no-email → userinfo no incluyó el claim email — habilitá el scope
sso-plan-required → la org no está en plan Advanced
sso-org-not-found → slug no existe o la org está desactivadaPreguntas frecuentes
¿Soportan SAML además de OIDC?
¿Verifican la firma del ID token con JWKS?
userinfo sobre TLS — el certificado del IdP es el trust anchor para el email. Si tu equipo de seguridad requiere verificación JWS offline, levantanos un ticket y activamos la validación con jose + JWKS para tu org.¿Pueden los miembros existentes seguir usando el OTP magic-link?
¿Qué pasa si rotamos el client_secret en el IdP?
¿Tu IdP no está en la lista o el flujo no funciona? Mandanos un mail a security@rootproof.io con el nombre del IdP y los logs del callback — respondemos en 24 h hábiles.