Vés al contingut

Identitat per a les teves apps, amb estàndards oberts

Et fa passar.

Un compte. Totes les portes.

Usher Identity fa iniciar la sessió a la gent a les teves apps amb OpenID Connect i OAuth 2.1: claus d’accés, codis, inici de sessió social i organitzacions, amb cada entorn separat de tots els altres.

Gratuït per començar. També funciona als teus servidors.

El Lobby

Una pàgina d’inici de sessió que rep, no que interroga.

El Lobby és la pàgina d’inici de sessió que Usher Identity allotja per a la teva app. Sempre diu on va la persona i té el mateix aspecte sigui quina sigui l’app que l’hi ha enviat, perquè la gent aprengui a confiar-hi.

Per continuar a
Tema
  • Diu el nom del producte on vas, cada vegada.
  • Claus d’accés, codis per correu electrònic i enllaços màgics, i contrasenyes només si les vols.
  • La mateixa pàgina tranquil·la, clara o fosca, a tots els productes.

Aquesta és una còpia funcional del Lobby. S’executa en aquesta pàgina, no envia res i no inicia la sessió de ningú.

Usher IdentityUsher IdentityPer continuar a Acme Notes

Hola de nou.

Inicia la sessió amb el teu compte d’Usher Identity.

Primer cop per aquí?

Protegit per Usher Identity

Estàndards, no dependència

Parla els protocols que el teu stack ja coneix.

Usher Identity és, abans de res, un proveïdor d’OpenID Connect. Fes servir el nostre SDK quan et convingui, o qualsevol biblioteca OIDC en qualsevol llenguatge. Si algun dia te’n vas, les teves apps no han de canviar la manera d’iniciar la sessió de la gent.

Tokens d’actualització, consentiment i àmbits inclosos.
  • OIDC Core · Discovery

    OpenID Connect

    Un document de descobriment per entorn, tokens d’identificació i userinfo. Funciona amb qualsevol biblioteca de client certificada.

  • Només S256

    OAuth 2.1 amb PKCE

    Codi d’autorització amb PKCE per a tots els clients, públics o confidencials. Sense flux implícit i sense contrasenyes a l’endpoint de tokens.

  • RS256 · ES256 · EdDSA

    JWKS i rotació de claus

    Cada entorn signa amb les seves pròpies claus, publicades al seu jwks_uri. Fes-les rotar sense fer fora ningú que tingui la sessió iniciada.

  • RFC 7662 · RFC 7009

    Introspecció i revocació

    Pregunta si un token encara és vàlid, o anul·la’l ara mateix. Usher Identity comprova les seves pròpies sessions a cada sol·licitud, així que tancar-ne una té efecte immediat.

  • Tancament de sessió iniciat per l’RP i per canal secundari

    Tanca la sessió des de la teva app, o fes que Usher Identity avisi totes les apps quan una sessió s’acaba en qualsevol lloc.

  • RFC 9449

    DPoP

    Vincula els tokens a una clau que té el client, de manera que un token robat no serveix de res tot sol.

  • WebAuthn

    Claus d’accés

    De primera classe, no un complement. La gent inicia la sessió amb l’empremta digital, la cara o una clau de seguretat, i no hi ha res que es pugui robar amb phishing.

  • TOTP

    Apps d’autenticació

    Codis basats en el temps de qualsevol app d’autenticació, amb codis de reserva. Fes que el segon factor sigui opcional o obligatori.

  • Enllaços màgics

    Un toc des de la safata d’entrada. De curta durada, d’un sol ús i vinculats a l’entorn que els ha enviat.

  • Codis per correu electrònic

    Sis dígits, per a la gent que inicia la sessió en un dispositiu i llegeix el correu en un altre.

  • Inici de sessió social

    Google, GitHub, Microsoft i Apple. Un compte només es vincula quan se n’ha verificat l’adreça electrònica.

  • Organitzacions i equips

    Membres, rols i invitacions per a les empreses que fan servir la teva app.

  • Aviat

    SAML

    Inici de sessió únic amb els proveïdors d’identitat corporativa dels teus clients.

  • Aviat

    SCIM

    Alta i baixa d’usuaris des dels directoris dels teus clients.

Com funciona un inici de sessió

Cinc passos, i tots estàndard.

És el flux de codi d’autorització amb PKCE d’OpenID Connect, el mateix flux que parla qualsevol proveïdor d’identitat seriós. Desplaça’t per veure’l.

  1. 01

    La teva app els envia al Lobby.

    Quan algú tria Continua amb Usher Identity, la teva app el redirigeix a l’endpoint d’autorització del teu entorn, amb un repte PKCE i un valor state que comprovarà més tard.

    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

    Inicien la sessió a la seva manera.

    Una clau d’accés, un codi per correu electrònic, un enllaç màgic, un compte social o una contrasenya: el Lobby només ofereix el que permet el teu entorn, i sempre diu a quina app van.

    Usher IdentityUsher IdentityPer continuar a Acme

    Hola de nou.

    Utilitza una clau d’accés
    Envia’m un codi per correu
  3. 03

    Accepten compartir.

    La primera vegada, la gent veu què demana la teva app (el seu perfil, la seva adreça electrònica, mantenir la sessió iniciada) i ho accepta un sol cop.

    Acme vol:

    • Veure el teu nom i la teva foto
    • Veure la teva adreça electrònica
    • Mantenir la sessió iniciada
    Cancel·laPermet
  4. 04

    Usher Identity torna un codi.

    El navegador torna al teu URI de redirecció amb un codi d’un sol ús que dura cinc minuts, i amb el state que has enviat, que la teva app comprova.

    302 Found
    Location: https://app.acme.example/callback
      ?code=SplxlOBeZQQYbYS6WxSbIA
      &state=k3Jx…
  5. 05

    La teva app el canvia per tokens.

    El teu servidor envia el codi i el verificador PKCE a l’endpoint de tokens. Tornen un token d’identificació que diu qui són, un token d’accés per a la teva API i un token d’actualització per mantenir la sessió 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
    }

Aïllament des del disseny

Cada entorn és un edifici independent.

Els teus entorns de producció i de desenvolupament, i els de tots els altres clients, no comparteixen res que importi. Un error en un no pot llegir dades d’un altre, ni signar-hi ni iniciar-hi la sessió.

El seu propi esquema de Postgres
No una columna d’inquilí en una taula compartida: un esquema fet per a l’entorn, i res més a dins.
Les seves pròpies claus de signatura
Els tokens d’un entorn mai no es poden verificar amb les claus d’un altre.
Els seus propis secrets segellats
Segellats amb la clau de dades de l’entorn, que al seu torn està protegida per una clau mestra.
El seu propi host
Els emissors són en un domini diferent del lloc web d’Usher i de Console, amb galetes només per al host.

usheridentity.com

El lloc web, Usher Identity Console, els comptes d’Usher Identity

*.usherid.com

Un emissor per entorn, en un domini separat

Entorn

Els usuaris, les sessions i els tokens viuen en un esquema fet per a aquest entorn. Les consultes s’executen en aquest esquema, mai en una taula compartida amb una columna d’inquilí.

Copia el secret de client de Google segellat de Acme (producció) a Northwind (producció).

Per a desenvolupadors

El teu primer inici de sessió, de tres maneres.

Afegeix l’SDK quan arribi, fes servir la biblioteca OIDC en què ja confies, o comença llegint el document de descobriment. A sota, tot és el mateix protocol.

app/layout.tsx · app/page.tsxArriba amb l’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 />
}

Allotja’l tu mateix

Els teus servidors, les teves claus.

Fes servir Usher Identity com a servei, o fes funcionar la mateixa plataforma als teus servidors, amb les teves claus i la teva base de dades.

  • Docker

    Un sol fitxer de Compose: les apps, Postgres, Valkey, la capa perimetral de Caddy i el proxy de sortida. Els contenidors s’executen sense privilegis nous i amb les capacitats retirades.

  • Ubuntu

    N’hi ha prou amb un servidor Ubuntu senzill. Caddy gestiona el TLS, i els secrets són fitxers que es lliuren als contenidors, mai incrustats a les imatges.

  • Postgres

    Postgres ho guarda tot, amb un esquema per entorn. Ell i Valkey són en una xarxa sense cap ruta cap a internet.

Des d’una còpia d’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 guia completa d’allotjament propi és en camí. Les ordres de dalt en donen una idea.

Fes passar els teus usuaris.

Crea un espai de treball i un projecte, i el teu primer entorn arriba amb el seu propi emissor, les seves claus i el seu Lobby.

Inicia la sessió un sol cop. Et rebran a tot arreu.