Identität für deine Apps, auf offenen Standards
Bittet dich herein.
Ein Konto. Jede Tür.
Usher Identity meldet Menschen mit OpenID Connect und OAuth 2.1 bei deinen Apps an: mit Passkeys, Codes, Social Login und Organisationen – und jede Umgebung bleibt von jeder anderen getrennt.
Kostenlos starten. Läuft auch auf deinen eigenen Servern.
- OpenID Connect
- OAuth 2.1
- PKCE
- WebAuthn
- JWKS
- DPoP
- TOTP
Die Lobby
Eine Anmeldeseite, die willkommen heißt, statt zu verhören.
Die Lobby ist die Anmeldeseite, die Usher Identity für deine App bereitstellt. Sie zeigt immer, wohin es gerade geht, und sieht gleich aus, egal welche App jemanden hergeschickt hat – so lernen Menschen, ihr zu vertrauen.
- Nennt jedes Mal das Produkt, zu dem es weitergeht.
- Passkeys, Codes per E-Mail und Magic Links – Passwörter nur, wenn du sie willst.
- Dieselbe ruhige Seite, hell oder dunkel, in jedem Produkt.
Das ist eine funktionierende Kopie der Lobby. Sie läuft auf dieser Seite, verschickt nichts und meldet niemanden an.
Standards statt Lock-in
Spricht die Protokolle, die dein Stack schon kennt.
Usher Identity ist in erster Linie ein OpenID-Connect-Provider. Nutze unser SDK, wenn es dir passt, oder jede beliebige OIDC-Bibliothek in jeder Sprache. Und solltest du einmal wechseln, müssen deine Apps nichts daran ändern, wie sie Menschen anmelden.
- OIDC Core · Discovery
OpenID Connect
Ein Discovery-Dokument pro Umgebung, ID-Tokens und Userinfo. Jede zertifizierte Client-Bibliothek funktioniert.
- Nur S256
OAuth 2.1 mit PKCE
Autorisierungscode mit PKCE für jeden Client, ob öffentlich oder vertraulich. Kein Implicit Flow, keine Passwörter am Token-Endpunkt.
- RS256 · ES256 · EdDSA
JWKS und Schlüsselrotation
Jede Umgebung signiert mit eigenen Schlüsseln, veröffentlicht unter ihrer jwks_uri. Rotiere sie, ohne dass angemeldete Nutzer etwas davon merken.
- RFC 7662 · RFC 7009
Introspection und Widerruf
Frag nach, ob ein Token noch gültig ist, oder beende es sofort. Usher Identity prüft bei jeder Anfrage seine eigenen Sitzungen, deshalb wirkt das Beenden einer Sitzung unmittelbar.
RP-initiierter und Back-Channel-Logout
Melde Nutzer aus deiner App heraus ab – oder lass Usher Identity jeder App Bescheid sagen, sobald irgendwo eine Sitzung endet.
- RFC 9449
DPoP
Binde Tokens an einen Schlüssel, den der Client besitzt. Ein gestohlenes Token allein nützt dann niemandem.
- WebAuthn
Passkeys
Von Anfang an dabei, kein Zusatz. Menschen melden sich mit Fingerabdruck, Gesicht oder Sicherheitsschlüssel an – und für Phishing gibt es nichts zu holen.
- TOTP
Authenticator-Apps
Zeitbasierte Codes aus jeder Authenticator-App, mit Backup-Codes. Mach einen zweiten Faktor optional oder verpflichtend.
Magic Links
Ein Tippen im Posteingang genügt. Kurzlebig, nur einmal verwendbar und an die Umgebung gebunden, die sie verschickt hat.
Codes per E-Mail
Sechs Ziffern – für alle, die sich auf einem Gerät anmelden und ihre E-Mails auf einem anderen lesen.
Social Login
Google, GitHub, Microsoft und Apple. Ein Konto wird erst verknüpft, wenn seine E-Mail-Adresse bestätigt ist.
Organisationen und Teams
Mitglieder, Rollen und Einladungen für die Unternehmen, die deine App nutzen.
- Demnächst
SAML
Single Sign-on über die Identity Provider, mit denen deine Kunden ihre Belegschaft verwalten.
- Demnächst
SCIM
Konten anlegen und wieder entfernen, direkt aus den Verzeichnissen deiner Kunden.
So läuft eine Anmeldung ab
Fünf Schritte, jeder davon Standard.
Das ist der Autorisierungscode-Flow von OpenID Connect mit PKCE – derselbe Flow, den jeder ernstzunehmende Identity Provider spricht. Scroll einfach hindurch.
- 01
Deine App schickt Nutzer zur Lobby.
Wählt jemand „Mit Usher Identity fortfahren“, leitet deine App die Person zum Autorisierungsendpunkt deiner Umgebung weiter – mit einer PKCE-Challenge und einem State-Wert, den sie später prüft.
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
Sie melden sich an, ganz wie sie möchten.
Ein Passkey, ein Code per E-Mail, ein Magic Link, Social Login oder ein Passwort: Die Lobby bietet nur an, was deine Umgebung erlaubt, und zeigt immer, zu welcher App es weitergeht.
Usher IdentityUsher IdentityWeiter zu AcmeWillkommen zurück.
Passkey verwendenCode per E-Mail senden - 03
Sie stimmen der Freigabe zu.
Beim ersten Mal sehen sie, worum deine App bittet (ihr Profil, ihre E-Mail-Adresse, angemeldet bleiben), und stimmen einmal zu.
Acme möchte:
- Deinen Namen und dein Bild sehen
- Deine E-Mail-Adresse sehen
- Dich angemeldet halten
AbbrechenErlauben - 04
Usher Identity gibt einen Code zurück.
Der Browser kehrt zu deiner Redirect-URI zurück – mit einem einmal verwendbaren Code, der fünf Minuten gilt, und dem State, den du mitgeschickt hast und den deine App prüft.
302 Found Location: https://app.acme.example/callback ?code=SplxlOBeZQQYbYS6WxSbIA &state=k3Jx…
- 05
Deine App tauscht ihn gegen Tokens.
Dein Server sendet den Code und den PKCE-Verifier an den Token-Endpunkt. Zurück kommen ein ID-Token, das sagt, wer die Person ist, ein Access-Token für deine API und ein Refresh-Token, damit sie angemeldet bleibt.
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 }
Isolation von Grund auf
Jede Umgebung ist ein eigenes Gebäude.
Deine Produktions- und Entwicklungsumgebungen – und die aller anderen Kunden – teilen nichts, worauf es ankommt. Ein Fehler in der einen kann in keiner anderen Daten lesen, etwas signieren oder jemanden anmelden.
- Ein eigenes Postgres-Schema
- Keine Mandantenspalte in einer gemeinsamen Tabelle, sondern ein Schema, das eigens für die Umgebung angelegt ist – und sonst nichts enthält.
- Eigene Signaturschlüssel
- Tokens aus einer Umgebung lassen sich nie mit den Schlüsseln einer anderen verifizieren.
- Eigene versiegelte Secrets
- Versiegelt mit dem eigenen Datenschlüssel der Umgebung, der seinerseits mit einem Hauptschlüssel verschlüsselt ist.
- Ein eigener Host
- Issuer liegen auf einer anderen Domain als Ushers Website und Console, mit Host-only-Cookies.
usheridentity.com
Die Website, Usher Identity Console, Konten bei Usher Identity
*.usherid.com
Ein Issuer pro Umgebung, auf einer eigenen Domain
Nutzer, Sitzungen und Tokens liegen in einem Schema, das eigens für diese Umgebung angelegt ist. Abfragen laufen gegen dieses Schema, nie gegen eine gemeinsame Tabelle mit Mandantenspalte.
Kopiere das versiegelte Google-Client-Secret aus der Produktionsumgebung von Acme in die Produktionsumgebung von Northwind.
Für Entwickler
Deine erste Anmeldung, auf drei Wegen.
Bau das SDK ein, sobald es da ist, nutze die OIDC-Bibliothek, der du schon vertraust, oder fang mit dem Discovery-Dokument an. Darunter steckt immer dasselbe Protokoll.
// 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 />
}Selbst betreiben
Deine Server, deine Schlüssel.
Nutze Usher Identity als Dienst oder betreibe dieselbe Plattform auf deinen eigenen Servern, mit deinen eigenen Schlüsseln und deiner eigenen Datenbank.
Docker
Eine Compose-Datei: die Apps, Postgres, Valkey, der Caddy-Edge und der Egress-Proxy. Die Container laufen ohne neue Privilegien und mit entzogenen Capabilities.
Ubuntu
Ein einfacher Ubuntu-Server genügt. Caddy terminiert TLS, und Secrets werden den Containern als Dateien übergeben, nie in Images eingebaut.
Postgres
Postgres hält alles, ein Schema pro Umgebung. Postgres und Valkey liegen in einem Netzwerk ohne Route ins 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 migrationsDie vollständige Anleitung zum Selbstbetrieb ist unterwegs. Die Befehle oben zeigen schon, wie sie aussehen wird.
Bitte deine Nutzer herein.
Erstelle einen Workspace und ein Projekt – deine erste Umgebung bringt ihren eigenen Issuer, eigene Schlüssel und eine eigene Lobby mit.
Einmal anmelden. Überall willkommen.