Ir al contenido

Identidad para tus apps, con estándares abiertos

Te invita a pasar.

Una cuenta. Todas las puertas.

Usher Identity permite que las personas inicien 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 que interroga.

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 se ve igual sin importar qué app la envió, para que las personas aprendan a confiar en ella.

Destino
Tema
  • Muestra el producto al que vas, siempre.
  • Llaves de acceso, códigos por correo y enlaces mágicos, y contraseñas solo si las quieres.
  • La misma página tranquila, 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 IdentityVas a Acme Notes

Hola de nuevo.

Inicia sesión con tu cuenta de Usher Identity.

¿Primera vez aquí?

Protegido por Usher Identity

Estándares, sin ataduras

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, no tendrás que cambiar cómo se inicia sesión en tus apps.

Tokens de actualización, consentimiento y alcances 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 tokens.

  • 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 quienes ya iniciaron sesión.

  • RFC 7662 · RFC 7009

    Introspección y revocación

    Pregunta si un token sigue siendo válido, o anúlalo en el acto. Usher Identity comprueba sus propias sesiones en cada solicitud, así que cerrar una tiene efecto de 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 lugar.

  • RFC 9449

    DPoP

    Vincula los tokens a una clave que guarda el cliente, para que un token robado no sirva por sí solo.

  • WebAuthn

    Llaves de acceso

    Integradas desde el principio, no añadidas después. Las personas inician sesión con su huella, su rostro o una llave de seguridad, y no hay nada que robar con phishing.

  • TOTP

    Apps de autenticación

    Códigos basados en el tiempo de cualquier app de autenticación, con códigos de respaldo. Haz que el segundo factor sea opcional u obligatorio.

  • Enlaces mágicos

    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

    Seis dígitos, para quienes inician sesión en un dispositivo y leen el correo en otro.

  • Inicio de sesión social

    Google, GitHub, Microsoft y Apple. Una cuenta solo se vincula cuando se comprobó 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, 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 una persona elige Continuar con Usher Identity, tu app la 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

    Inicia sesión a su manera.

    Una llave de acceso, un código por correo, un enlace mágico, una cuenta social o una contraseña: el Lobby ofrece solo lo que tu entorno permite, y siempre dice a qué app va la persona.

    Usher IdentityUsher IdentityVas a Acme

    Hola de nuevo.

    Usar una llave de acceso
    Enviarme un código por correo
  3. 03

    Acepta compartir.

    La primera vez, la persona ve lo que tu app pide (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 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 tokens. 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 independiente.

Tus entornos de producción y de desarrollo, y los de todos los demás clientes, no comparten nada importante. Un error en uno no puede leer los datos de otro, 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á cifrada con una clave maestra.
Su propio host
Los emisores están en un dominio distinto del sitio de Usher y de Console, con cookies solo del 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 entorno de producción de Northwind.

Para desarrolladores

Tu primer inicio de sesión, de tres formas.

Integra el SDK cuando llegue, usa la biblioteca OIDC en la que ya confías o empieza por leer 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 />
}

En tus propios servidores

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, Caddy en el perímetro y el proxy de salida. Los contenedores se ejecutan sin privilegios nuevos y con las capacidades eliminadas.

  • Ubuntu

    Basta con un servidor Ubuntu común. Caddy termina TLS, y los secretos son archivos que se entregan a los contenedores, nunca incluidos en las imágenes.

  • Postgres

    Postgres guarda todo, con un esquema por entorno. Postgres y Valkey están en una red sin ruta a internet.

Desde un clon 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 para alojar Usher en tus servidores 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 vendrá con su propio emisor, sus claves y su Lobby.

Inicia sesión una vez. Te damos la bienvenida en todas partes.