Direct naar de inhoud

Identiteit voor je apps, op open standaarden

Brengt je naar binnen.

Eén account. Elke deur.

Usher Identity laat mensen inloggen bij je apps met OpenID Connect en OAuth 2.1: toegangssleutels, codes, inloggen met sociale accounts en organisaties, met elke omgeving gescheiden van alle andere.

Gratis om mee te beginnen. Draait ook op je eigen servers.

De Lobby

Een inlogpagina die verwelkomt, niet verhoort.

De Lobby is de inlogpagina die Usher Identity voor je app host. Er staat altijd op waar iemand naartoe gaat, en ze ziet er hetzelfde uit, welke app iemand ook heeft gestuurd. Zo leren mensen haar te vertrouwen.

Verder naar
Thema
  • Noemt elke keer het product waar je naartoe gaat.
  • Toegangssleutels, codes per e-mail en magic links, met wachtwoorden alleen als jij dat wilt.
  • Dezelfde rustige pagina, licht of donker, in elk product.

Dit is een werkende kopie van de Lobby. Ze draait op deze pagina, verstuurt niets en laat niemand inloggen.

Usher IdentityUsher IdentityVerder naar Acme Notes

Welkom terug.

Log in met je Usher Identity-account.

Nieuw hier?

Beveiligd door Usher Identity

Standaarden, geen lock-in

Spreekt de protocollen die je stack al kent.

Usher Identity is in de eerste plaats een OpenID Connect-provider. Gebruik onze SDK als dat je uitkomt, of elke OIDC-bibliotheek in elke taal. Mocht je ooit vertrekken, dan hoeven je apps niets te veranderen aan hoe ze mensen laten inloggen.

Inclusief vernieuwingstokens, toestemming en scopes.
  • OIDC Core · Discovery

    OpenID Connect

    Een discovery-document per omgeving, ID-tokens en userinfo. Elke gecertificeerde clientbibliotheek werkt.

  • Alleen S256

    OAuth 2.1 met PKCE

    Autorisatiecode met PKCE voor elke client, openbaar of vertrouwelijk. Geen implicit flow, geen wachtwoorden in het tokeneindpunt.

  • RS256 · ES256 · EdDSA

    JWKS en sleutelrotatie

    Elke omgeving ondertekent met eigen sleutels, gepubliceerd op haar jwks_uri. Roteer ze zonder dat ingelogde mensen er iets van merken.

  • RFC 7662 · RFC 7009

    Introspectie en intrekking

    Vraag of een token nog geldig is, of beëindig het meteen. Usher Identity controleert bij elk verzoek de eigen sessies, dus een sessie beëindigen werkt direct.

  • RP-initiated en back-channel logout

    Log uit vanuit je app, of laat Usher Identity elke app inlichten wanneer er ergens een sessie eindigt.

  • RFC 9449

    DPoP

    Bind tokens aan een sleutel die de client bezit, zodat een gestolen token op zichzelf niets waard is.

  • WebAuthn

    Toegangssleutels

    Volwaardig, geen toevoeging achteraf. Mensen loggen in met een vingerafdruk, hun gezicht of een beveiligingssleutel, en er valt niets te phishen.

  • TOTP

    Authenticator-apps

    Tijdgebonden codes uit elke authenticator-app, met back-upcodes. Maak een tweede factor optioneel of verplicht.

  • Magic links

    Eén tik vanuit de inbox. Kort geldig, eenmalig te gebruiken en gebonden aan de omgeving die ze heeft verstuurd.

  • Codes per e-mail

    Zes cijfers, voor mensen die op het ene apparaat inloggen en op het andere hun e-mail lezen.

  • Inloggen met sociale accounts

    Google, GitHub, Microsoft en Apple. Een account wordt alleen gekoppeld als het e-mailadres ervan is geverifieerd.

  • Organisaties en teams

    Leden, rollen en uitnodigingen voor de bedrijven die je app gebruiken.

  • Binnenkort

    SAML

    Single sign-on met de identiteitsproviders die je klanten voor hun medewerkers gebruiken.

  • Binnenkort

    SCIM

    Accounts aanmaken en weer opheffen vanuit de directory’s van je klanten.

Hoe inloggen werkt

Vijf stappen, allemaal volgens de standaard.

Dit is de autorisatiecodeflow van OpenID Connect met PKCE, dezelfde flow die elke serieuze identiteitsprovider spreekt. Scroll er stap voor stap doorheen.

  1. 01

    Je app stuurt ze naar de Lobby.

    Als iemand voor ‘Ga door met Usher Identity’ kiest, stuurt je app diegene door naar het autorisatie-eindpunt van je omgeving, met een PKCE-challenge en een state-waarde die de app later controleert.

    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

    Ze loggen in op hun eigen manier.

    Een toegangssleutel, een code per e-mail, een magic link, een sociaal account of een wachtwoord: de Lobby biedt alleen aan wat je omgeving toestaat, en zegt altijd naar welke app iemand gaat.

    Usher IdentityUsher IdentityVerder naar Acme

    Welkom terug.

    Gebruik een toegangssleutel
    Mail me een code
  3. 03

    Ze geven toestemming om te delen.

    De eerste keer zien mensen waar je app om vraagt (hun profiel, hun e-mailadres, ingelogd blijven) en geven ze één keer toestemming.

    Acme wil graag:

    • Je naam en foto zien
    • Je e-mailadres zien
    • Je ingelogd houden
    AnnuleerSta toe
  4. 04

    Usher Identity geeft een code terug.

    De browser keert terug naar je omleidings-URI met een eenmalige code die vijf minuten geldig is, en met de state die je hebt meegestuurd, die je app controleert.

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

    Je app ruilt de code in voor tokens.

    Je server stuurt de code en de PKCE-verifier naar het tokeneindpunt. Terug komen een ID-token dat zegt wie iemand is, een toegangstoken voor je API en een vernieuwingstoken om ingelogd te blijven.

    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
    }

Gescheiden vanaf het ontwerp

Elke omgeving is een gebouw op zichzelf.

Je productie- en ontwikkelomgevingen, en die van elke andere klant, delen niets wat ertoe doet. Een fout in de ene omgeving kan een andere niet lezen, niet namens die andere ondertekenen en er niet bij inloggen.

Een eigen Postgres-schema
Geen tenantkolom in een gedeelde tabel, maar een schema dat voor de omgeving is gemaakt, met verder niets erin.
Eigen ondertekeningssleutels
Tokens uit de ene omgeving zijn nooit te verifiëren met de sleutels van een andere.
Eigen verzegelde geheimen
Verzegeld met de eigen gegevenssleutel van de omgeving, die zelf weer is versleuteld met een hoofdsleutel.
Een eigen host
Issuers staan op een ander domein dan de site van Usher en Console, met host-only cookies.

usheridentity.com

De site, Usher Identity Console, Usher Identity-accounts

*.usherid.com

Eén issuer per omgeving, op een apart domein

Omgeving

Gebruikers, sessies en tokens staan in een schema dat voor deze omgeving is gemaakt. Query’s draaien tegen dat schema, nooit tegen een gedeelde tabel met een tenantkolom.

Kopieer het verzegelde Google-clientgeheim van Acme productie naar Northwind productie.

Voor ontwikkelaars

Je eerste inlog, op drie manieren.

Zet de SDK erin zodra die er is, gebruik de OIDC-bibliotheek die je al vertrouwt, of begin met het discovery-document. Eronder is het allemaal hetzelfde protocol.

app/layout.tsx · app/page.tsxKomt met de 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 />
}

Zelf hosten

Jouw servers, jouw sleutels.

Gebruik Usher Identity als dienst, of draai hetzelfde platform op je eigen servers, met je eigen sleutels en je eigen database.

  • Docker

    Eén Compose-bestand: de apps, Postgres, Valkey, de Caddy-edge en de egress-proxy. Containers draaien zonder nieuwe rechten en met ingetrokken capabilities.

  • Ubuntu

    Een gewone Ubuntu-server is genoeg. Caddy verzorgt de TLS-terminatie, en geheimen zijn bestanden die aan de containers worden meegegeven, nooit ingebakken in images.

  • Postgres

    Postgres bewaart alles, één schema per omgeving. Postgres en Valkey zitten op een netwerk zonder route naar het internet.

Vanuit een checkout van 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

De volledige handleiding voor zelf hosten is onderweg. De opdrachten hierboven geven er al een beeld van.

Breng je gebruikers naar binnen.

Maak een werkruimte en een project aan, en je eerste omgeving krijgt meteen een eigen issuer, eigen sleutels en een eigen Lobby.

Eén keer inloggen. Overal welkom.