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.
- OpenID Connect
- OAuth 2.1
- PKCE
- WebAuthn
- JWKS
- DPoP
- TOTP
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.
- 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.
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.
- 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.
- 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
- 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 AcmeWelkom terug.
Gebruik een toegangssleutelMail me een code - 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 - 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…
- 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
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
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.
# 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 migrationsDe 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.