L’identité pour vos apps, sur des standards ouverts
Vous fait entrer.
Un seul compte. Toutes les portes.
Usher Identity connecte les utilisateurs à vos apps avec OpenID Connect et OAuth 2.1 : clés d’identification, codes, connexion sociale et organisations, chaque environnement restant isolé de tous les autres.
Gratuit pour commencer. Fonctionne aussi sur vos propres serveurs.
- OpenID Connect
- OAuth 2.1
- PKCE
- WebAuthn
- JWKS
- DPoP
- TOTP
Le Lobby
Une page de connexion qui accueille au lieu d’interroger.
Le Lobby est la page de connexion qu’Usher Identity héberge pour votre app. Il indique toujours où va la personne, et il a le même aspect quelle que soit l’app qui l’y envoie : les utilisateurs apprennent ainsi à lui faire confiance.
- Nomme à chaque fois le produit vers lequel vous allez.
- Clés d’identification, codes par e-mail et liens magiques, avec des mots de passe uniquement si vous le souhaitez.
- La même page sereine, claire ou sombre, dans chaque produit.
Ceci est une copie fonctionnelle du Lobby. Elle s’exécute dans cette page, n’envoie rien et ne connecte personne.
Des standards, pas de dépendance
Parle les protocoles que votre stack connaît déjà.
Usher Identity est avant tout un fournisseur OpenID Connect. Utilisez notre SDK quand cela vous convient, ou n’importe quelle bibliothèque OIDC, dans n’importe quel langage. Si vous partez un jour, vos apps n’auront pas à changer leur façon de connecter les utilisateurs.
- OIDC Core · Discovery
OpenID Connect
Un document de découverte par environnement, des jetons d’ID et userinfo. Toute bibliothèque cliente certifiée fonctionne.
- S256 uniquement
OAuth 2.1 avec PKCE
Code d’autorisation avec PKCE pour chaque client, public ou confidentiel. Pas de flux implicite, pas de mot de passe envoyé au point de terminaison de jeton.
- RS256 · ES256 · EdDSA
JWKS et rotation des clés
Chaque environnement signe avec ses propres clés, publiées à son jwks_uri. Effectuez leur rotation sans perturber les utilisateurs connectés.
- RFC 7662 · RFC 7009
Introspection et révocation
Demandez si un jeton est toujours valide, ou révoquez-le sur-le-champ. Usher Identity vérifie ses propres sessions à chaque requête : mettre fin à l’une d’elles prend donc effet aussitôt.
Déconnexion depuis l’app et par canal arrière
Déconnectez les utilisateurs depuis votre app, ou laissez Usher Identity prévenir chaque app dès qu’une session se termine, où que ce soit.
- RFC 9449
DPoP
Liez les jetons à une clé que détient le client : un jeton volé ne sert alors à rien à lui seul.
- WebAuthn
Clés d’identification
Prises en charge d’emblée, pas en option. Les utilisateurs se connectent avec leur empreinte, leur visage ou une clé de sécurité, et l’hameçonnage n’a aucune prise.
- TOTP
Apps d’authentification
Des codes temporaires depuis n’importe quelle app d’authentification, avec des codes de secours. Rendez le second facteur facultatif ou obligatoire.
Liens magiques
D’un simple toucher depuis la boîte de réception. Éphémères, à usage unique et liés à l’environnement qui les a envoyés.
Codes par e-mail
Six chiffres, pour ceux qui se connectent sur un appareil et lisent leurs e-mails sur un autre.
Connexion sociale
Google, GitHub, Microsoft et Apple. Un compte n’est associé qu’une fois son adresse e-mail vérifiée.
Organisations et équipes
Membres, rôles et invitations pour les entreprises qui utilisent votre app.
- Bientôt disponible
SAML
Authentification unique avec les fournisseurs d’identité professionnels de vos clients.
- Bientôt disponible
SCIM
Provisionnement et déprovisionnement depuis les annuaires de vos clients.
Le déroulement d’une connexion
Cinq étapes, toutes standard.
Voici le flux de code d’autorisation d’OpenID Connect avec PKCE, celui que parle tout fournisseur d’identité sérieux. Faites défiler pour le suivre.
- 01
Votre app envoie vos utilisateurs vers le Lobby.
Quand quelqu’un choisit Continuer avec Usher Identity, votre app le redirige vers le point de terminaison d’autorisation de votre environnement, avec un défi PKCE et une valeur state qu’elle vérifiera plus 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
- 02
Ils se connectent, à leur façon.
Clé d’identification, code par e-mail, lien magique, compte social ou mot de passe : le Lobby ne propose que ce que votre environnement autorise, et indique toujours vers quelle app ils se dirigent.
Usher IdentityUsher IdentityEn route vers AcmeBon retour parmi nous.
Utiliser une clé d’identificationRecevoir un code par e-mail - 03
Ils acceptent le partage.
La première fois, les utilisateurs voient ce que votre app demande (leur profil, leur adresse e-mail, le maintien de leur connexion) et donnent leur accord une fois pour toutes.
Acme souhaite :
- Voir votre nom et votre photo
- Voir votre adresse e-mail
- Maintenir votre connexion
AnnulerAutoriser - 04
Usher Identity renvoie un code.
Le navigateur revient sur votre URI de redirection avec un code à usage unique valable cinq minutes, ainsi que le state que vous avez envoyé, que votre app vérifie.
302 Found Location: https://app.acme.example/callback ?code=SplxlOBeZQQYbYS6WxSbIA &state=k3Jx…
- 05
Votre app l’échange contre des jetons.
Votre serveur envoie le code et le vérificateur PKCE au point de terminaison de jeton. En retour : un jeton d’ID qui indique qui ils sont, un jeton d’accès pour votre API, et un jeton d’actualisation pour qu’ils restent connectés.
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 }
Isolé par conception
Chaque environnement est un bâtiment à part.
Vos environnements de production et de développement, comme ceux de tous les autres clients, ne partagent rien d’important. Une erreur dans l’un ne peut ni lire un autre, ni signer à sa place, ni s’y connecter.
- Son propre schéma Postgres
- Pas une colonne de locataire dans une table partagée : un schéma créé pour l’environnement, et rien d’autre dedans.
- Ses propres clés de signature
- Les jetons d’un environnement ne peuvent jamais être vérifiés avec les clés d’un autre.
- Ses propres secrets scellés
- Scellés avec la clé de données de l’environnement, elle-même enveloppée par une clé maîtresse.
- Son propre hôte
- Les émetteurs se trouvent sur un autre domaine que le site d’Usher et la Console, avec des cookies limités à leur hôte.
usheridentity.com
Le site, Usher Identity Console, les comptes Usher Identity
*.usherid.com
Un émetteur par environnement, sur un domaine distinct
Les utilisateurs, les sessions et les jetons se trouvent dans un schéma créé pour cet environnement. Les requêtes s’exécutent sur ce schéma, jamais sur une table partagée avec une colonne de locataire.
Copier le secret client Google scellé de l’environnement de production Acme vers l’environnement de production Northwind.
Pour les développeurs
Votre première connexion, de trois façons.
Intégrez le SDK dès sa sortie, utilisez la bibliothèque OIDC à laquelle vous faites déjà confiance, ou commencez par lire le document de découverte. Au fond, c’est toujours le même protocole.
// 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 />
}Auto-hébergement
Vos serveurs, vos clés.
Utilisez Usher Identity en tant que service, ou exécutez la même plateforme sur vos propres serveurs, avec vos propres clés et votre propre base de données.
Docker
Un seul fichier Compose : les apps, Postgres, Valkey, Caddy en frontal et le proxy de sortie. Les conteneurs s’exécutent sans nouveaux privilèges et avec leurs capacités Linux retirées.
Ubuntu
Un simple serveur Ubuntu suffit. Caddy assure la terminaison TLS, et les secrets sont des fichiers remis aux conteneurs, jamais intégrés aux images.
Postgres
Postgres contient tout, avec un schéma par environnement. Postgres et Valkey se trouvent sur un réseau sans route vers 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 migrationsLe guide complet de l’auto-hébergement arrive bientôt. Les commandes ci-dessus en donnent les grandes lignes.
Faites entrer vos utilisateurs.
Créez un espace de travail et un projet : votre premier environnement arrive avec son propre émetteur, ses clés et son Lobby.
Une connexion, et bienvenue partout.