Identidad para tus apps, con estándares abiertos
Te invita a pasar.
Una cuenta. Todas las puertas.
Usher Identity se encarga del inicio de sesión en tus apps con OpenID Connect y OAuth 2.1: llaves de acceso, códigos, inicio de sesión social y organizaciones, con cada entorno separado de todos los demás.
Gratis para empezar. También funciona en tus propios servidores.
- OpenID Connect
- OAuth 2.1
- PKCE
- WebAuthn
- JWKS
- DPoP
- TOTP
El Lobby
Una página de inicio de sesión que da la bienvenida, no un interrogatorio.
El Lobby es la página de inicio de sesión que Usher Identity aloja para tu app. Siempre dice adónde va la persona y tiene el mismo aspecto sea cual sea la app que la envíe, así que la gente aprende a confiar en él.
- Indica siempre el producto al que vas.
- Llaves de acceso, códigos por correo electrónico y enlaces mágicos, y contraseñas solo si las quieres.
- La misma página serena, clara u oscura, en todos los productos.
Esta es una copia funcional del Lobby. Se ejecuta en esta página, no envía nada y no inicia la sesión de nadie.
Estándares, no dependencia
Habla los protocolos que tu stack ya conoce.
Usher Identity es, ante todo, un proveedor de OpenID Connect. Usa nuestro SDK cuando te convenga, o cualquier biblioteca OIDC en cualquier lenguaje. Si algún día te vas, tus apps no tendrán que cambiar su forma de iniciar sesión.
- OIDC Core · Discovery
OpenID Connect
Un documento de descubrimiento por entorno, tokens de ID y userinfo. Funciona con cualquier biblioteca cliente certificada.
- Solo S256
OAuth 2.1 con PKCE
Código de autorización con PKCE para todos los clientes, públicos o confidenciales. Sin flujo implícito y sin contraseñas en el endpoint de token.
- RS256 · ES256 · EdDSA
JWKS y rotación de claves
Cada entorno firma con sus propias claves, publicadas en su jwks_uri. Rótalas sin afectar a quien ya ha iniciado sesión.
- RFC 7662 · RFC 7009
Introspección y revocación
Pregunta si un token sigue siendo válido o anúlalo al momento. Usher Identity comprueba sus propias sesiones en cada petición, así que cerrar una tiene efecto inmediato.
Cierre de sesión iniciado por el RP y por canal secundario
Cierra la sesión desde tu app, o deja que Usher Identity avise a todas las apps cuando una sesión termine en cualquier sitio.
- RFC 9449
DPoP
Vincula los tokens a una clave que tiene el cliente, para que un token robado no sirva de nada por sí solo.
- WebAuthn
Llaves de acceso
De serie, no como un añadido. La gente inicia sesión con la huella, la cara o una llave de seguridad, y el phishing no tiene nada que robar.
- TOTP
Apps de autenticación
Códigos temporales de cualquier app de autenticación, con códigos de reserva. Haz que el segundo factor sea opcional u obligatorio.
Enlaces mágicos
A un toque desde la bandeja de entrada. De corta duración, de un solo uso y vinculados al entorno que los envió.
Códigos por correo electrónico
Seis dígitos, para quien inicia sesión en un dispositivo y lee el correo en otro.
Inicio de sesión social
Google, GitHub, Microsoft y Apple. Una cuenta solo se vincula cuando se ha verificado su correo electrónico.
Organizaciones y equipos
Miembros, roles e invitaciones para las empresas que usan tu app.
- Próximamente
SAML
Inicio de sesión único con los proveedores de identidad corporativos de tus clientes.
- Próximamente
SCIM
Aprovisionamiento y desaprovisionamiento desde los directorios de tus clientes.
Cómo funciona un inicio de sesión
Cinco pasos, y todos estándar.
Es el flujo de código de autorización con PKCE de OpenID Connect, el mismo que habla cualquier proveedor de identidad serio. Desplázate para recorrerlo.
- 01
Tu app envía a la persona al Lobby.
Cuando alguien elige Continuar con Usher Identity, tu app lo redirige al endpoint de autorización de tu entorno, con un desafío PKCE y un valor de state que comprobará después.
GET acme.usherid.com/api/auth/oauth2/authorize ?response_type=code &client_id=acme_web &redirect_uri=https://app.acme.example/callback &scope=openid profile email offline_access &state=k3Jx… &code_challenge=E9Mel…cM &code_challenge_method=S256
- 02
La persona inicia sesión, a su manera.
Una llave de acceso, un código por correo electrónico, un enlace mágico, una cuenta social o una contraseña: el Lobby solo ofrece lo que permite tu entorno y siempre indica a qué app va la persona.
Usher IdentityUsher IdentityPara continuar en AcmeHola de nuevo.
Usar una llave de accesoEnviarme un código por correo - 03
Da su consentimiento para compartir.
La primera vez, la persona ve lo que pide tu app (su perfil, su correo electrónico, mantener la sesión iniciada) y lo acepta una sola vez.
Acme quiere:
- Ver tu nombre y tu foto
- Ver tu dirección de correo electrónico
- Mantener tu sesión iniciada
CancelarPermitir - 04
Usher Identity devuelve un código.
El navegador vuelve a tu URI de redirección con un código de un solo uso que dura cinco minutos y con el state que enviaste, que tu app comprueba.
302 Found Location: https://app.acme.example/callback ?code=SplxlOBeZQQYbYS6WxSbIA &state=k3Jx…
- 05
Tu app lo cambia por tokens.
Tu servidor envía el código y el verificador PKCE al endpoint de token. A cambio recibe un token de ID que dice quién es la persona, un token de acceso para tu API y un token de actualización para mantener la sesión iniciada.
POST acme.usherid.com/api/auth/oauth2/token grant_type=authorization_code&code=Splx… &code_verifier=dBjftJeZ4CVP… { "token_type": "Bearer", "access_token": "eyJhbGciOiJSUzI1NiIs…", "id_token": "eyJhbGciOiJSUzI1NiIs…", "refresh_token": "8xLOxBtZp8…", "expires_in": 600 }
Aislamiento desde el diseño
Cada entorno es un edificio propio.
Tus entornos de producción y de desarrollo, y los de cualquier otro cliente, no comparten nada importante. Un error en uno no puede leer los datos de otro, ni firmar en su nombre, ni iniciar sesión en él.
- Su propio esquema de Postgres
- No una columna de inquilino en una tabla compartida: un esquema creado para el entorno, sin nada más dentro.
- Sus propias claves de firma
- Los tokens de un entorno nunca se pueden verificar con las claves de otro.
- Sus propios secretos sellados
- Sellados con la clave de datos del propio entorno, que a su vez está envuelta por una clave maestra.
- Su propio host
- Los emisores están en un dominio distinto del sitio de Usher y de Console, con cookies limitadas a su host.
usheridentity.com
El sitio, Usher Identity Console y las cuentas de Usher Identity
*.usherid.com
Un emisor por entorno, en un dominio aparte
Los usuarios, las sesiones y los tokens están en un esquema creado para este entorno. Las consultas se ejecutan en ese esquema, nunca en una tabla compartida con una columna de inquilino.
Copia el secreto de cliente de Google sellado del entorno de producción de Acme al de producción de Northwind.
Para desarrolladores
Tu primer inicio de sesión, de tres maneras.
Integra el SDK cuando llegue, usa la biblioteca OIDC en la que ya confías o empieza leyendo el documento de descubrimiento. Por debajo, todo es el mismo protocolo.
// app/layout.tsx
import { UsherProvider } from '@usher/nextjs'
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<body>
<UsherProvider>{children}</UsherProvider>
</body>
</html>
)
}
// app/page.tsx
import { SignIn, UserButton, currentUser } from '@usher/nextjs'
export default async function Page() {
const user = await currentUser()
return user ? <UserButton /> : <SignIn />
}Autoalojamiento
Tus servidores, tus claves.
Usa Usher Identity como servicio o ejecuta la misma plataforma en tus propios servidores, con tus propias claves y tu propia base de datos.
Docker
Un solo archivo de Compose: las apps, Postgres, Valkey, el perímetro de Caddy y el proxy de salida. Los contenedores se ejecutan sin privilegios nuevos y con las capacidades eliminadas.
Ubuntu
Basta con un servidor Ubuntu normal. Caddy termina el TLS, y los secretos son archivos que se entregan a los contenedores, nunca incrustados en las imágenes.
Postgres
Postgres lo guarda todo, con un esquema por entorno. Tanto Postgres como Valkey están en una red sin ruta a internet.
# on an Ubuntu server with Docker Engine and the Compose plugin
bash infra/scripts/setup-env.sh --prod \
--domain usher.example --tenant-domain usherid.example
docker compose -f compose.yaml -f compose.prod.yaml \
--profile core --profile apps --profile edge up -d --wait
pnpm db:migrate # applies the database migrationsLa guía completa de autoalojamiento está en camino. Los comandos de arriba dan una idea de cómo será.
Invita a pasar a tus usuarios.
Crea un espacio de trabajo y un proyecto, y tu primer entorno llegará con su propio emisor, sus propias claves y su propio Lobby.
Inicia sesión una vez. Te damos la bienvenida en todas partes.