Saltar al contenido

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.

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.

Para continuar en
Tema
  • 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.

Usher IdentityUsher IdentityPara continuar en Acme Notes

Hola de nuevo.

Inicia sesión con tu cuenta de Usher Identity.

¿Primera vez aquí?

Protegido por Usher Identity

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.

Tokens de actualización, consentimiento y ámbitos incluidos.
  • 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.

  1. 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
  2. 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 Acme

    Hola de nuevo.

    Usar una llave de acceso
    Enviarme un código por correo
  3. 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
  4. 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…
  5. 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

Entorno

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 · app/page.tsxLlega con el SDK
// 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.

Desde una copia local de Usher Identity
# 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 migrations

La 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.