Opérationnel en trois étapes
De la clé d'API à la première requête authentifiée en moins de cinq minutes.
Créez un compte et enregistrez un client OAuth dans la console développeur. Vous recevrez un client_id et un client_secret.
# Developer console
https://uniauth.id/account/developer
# Or via Admin API
POST /api/admin/oauth-clients
{
"name": "My App",
"redirect_uris": ["https://app.example/cb"]
}Utilisez l'endpoint token pour échanger un code d'autorisation contre un jeton d'accès et un jeton d'ID.
curl -X POST https://uniauth.id/api/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_code" \
-d "code=AUTH_CODE" \
-d "client_id=YOUR_CLIENT_ID" \
-d "client_secret=YOUR_SECRET" \
-d "redirect_uri=https://app.example/cb" \
-d "code_verifier=PKCE_VERIFIER"L'endpoint token renvoie un jeton d'accès, un jeton d'ID et un jeton de rafraîchissement. Utilisez le jeton d'accès pour appeler les endpoints protégés.
{
"access_token": "eyJhbGci...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "dGhpcyBpcyBh...",
"id_token": "eyJhbGci...",
"scope": "openid profile email"
}Endpoints de l'API par catégorie
32 endpoints répartis en six groupes. Chaque endpoint applique une limitation de débit, valide le Content-Type et renvoie des objets d'erreur cohérents.
Authentification
6 endpoints/api/auth/loginAuthentifie un utilisateur par e-mail et mot de passe. Renvoie un jeton de session et déclenche la 2FA si elle est activée.
/api/auth/registerCrée un nouveau compte utilisateur avec e-mail, mot de passe et champs de profil facultatifs.
/api/auth/logoutMet fin à la session en cours, révoque les jetons et déclenche la déconnexion backchannel/frontchannel des clients OAuth.
/api/auth/forgot-passwordEnvoie un e-mail de réinitialisation de mot de passe avec un jeton à durée limitée, haché en SHA-256.
/api/auth/reset-passwordRéinitialise le mot de passe avec le jeton issu de forgot-password. Applique l'historique des mots de passe et les contrôles de robustesse.
/api/auth/verify-emailConfirme la propriété de l'adresse e-mail à l'aide du jeton de vérification envoyé à l'inscription.
OAuth 2.0 / OIDC
6 endpoints/api/oauth/authorizeDémarre le flux par code d'autorisation OAuth 2.0 avec PKCE. Redirige vers la connexion puis l'écran de consentement.
/api/oauth/tokenÉchange un code d'autorisation contre des jetons, rafraîchit les jetons ou traite les grants device et client-credentials.
/api/oauth/userinfoRenvoie les claims OIDC de l'utilisateur authentifié. Prend en charge GET et POST conformément à la section 5.3.1 d'OIDC Core.
/api/oauth/revokeRévoque un jeton d'accès ou de rafraîchissement. Prend en charge le paramètre token_type_hint.
/api/oauth/introspectInspecte un jeton pour déterminer son statut actif, ses scopes et ses métadonnées (RFC 7662).
/.well-known/openid-configurationDocument OIDC Discovery listant tous les endpoints, les scopes pris en charge, les claims et les algorithmes.
Gestion des utilisateurs
4 endpoints/api/user/profileRécupère le profil complet de l'utilisateur authentifié, y compris les claims standard OIDC et les préférences.
/api/user/profileMet à jour les champs du profil : nom d'affichage, bio, locale, liens sociaux, adresse, etc.
/api/user/sessionsListe toutes les sessions actives de l'utilisateur authentifié, avec infos sur l'appareil et dernière activité.
/api/user/sessionsRévoque une session précise par ID ou toutes les autres sessions (invalidation après changement de mot de passe).
Organisations / Équipes
8 endpoints/api/user/organizationsCrée une organisation en libre-service. Le créateur en devient le propriétaire (10 organisations possédées max) ; démarre sur l'offre team.
/api/org/{id}/usersListe et gère les membres et rôles de l'organisation (owner/admin/member). Plafond de 25 sièges sur l'offre team (HTTP 402 si dépassé).
/api/org/{id}/invitationsInvite un membre par e-mail avec acceptation par jeton. La capacité est vérifiée à l'invitation et à l'acceptation.
/api/org/{id}/groupsCrée et gère les groupes de l'organisation et leurs membres. Les noms de groupes apparaissent dans le claim OIDC groups.
/api/org/{id}/clients/{cid}/scim-tokenÉmet ou renouvelle le jeton SCIM par client pour une organisation. Offre enterprise — renvoie sinon 402 upgrade_required.
/api/org/{id}/domainsAjoute et vérifie un domaine personnalisé pour l'organisation. Offre enterprise — conditionne le SSO et la capture par domaine.
/api/org/{id}/saml-idpsConfigure le SSO entrant : SP SAML et IdP fédérés OIDC (aussi /federated-idps). Offre enterprise.
/api/org/{id}/billingFacturation Stripe par organisation : statut de l'abonnement, sièges et paiement. Chaque organisation est son propre client, facturé au siège.
Provisionnement SCIM 2.0
4 endpoints/api/scim/v2/UsersListe ou recherche des utilisateurs avec la syntaxe de filtre SCIM. Prend en charge la pagination et la projection d'attributs.
/api/scim/v2/UsersProvisionne un nouvel utilisateur via SCIM. Mappe le schéma de ressource utilisateur SCIM vers la table users d'UniAuth.
/api/scim/v2/GroupsListe ou recherche des groupes. Inclut les références des membres et prend en charge les requêtes de filtre.
/api/scim/v2/BulkExécute plusieurs opérations SCIM en une seule requête. Maximum 100 opérations par lot.
Administration
4 endpoints/api/admin/usersListe tous les utilisateurs avec pagination, recherche, filtre par rôle et tri. Rôle admin ou modérateur requis.
/api/admin/analyticsRécupère les statistiques de la plateforme : DAU/WAU/MAU, tendances de connexion, adoption de la 2FA, répartition des méthodes d'authentification.
/api/admin/audit-eventsInterroge le journal d'audit infalsifiable. Filtrez par catégorie, acteur, cible, plage de dates et type d'événement.
/api/admin/webhooksEnregistre un endpoint de webhook avec abonnements aux événements et secret de signature HMAC-SHA256.
Méthodes d'authentification de l'API
Quatre façons d'authentifier les requêtes API, selon l'endpoint et le cas d'usage.
Transmettez le jeton d'accès dans l'en-tête Authorization. Utilisé pour les endpoints protégés par OAuth comme userinfo, l'introspection de jetons et les appels API de client à client.
GET /api/oauth/userinfo
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Accept: application/jsonLes requêtes first-party utilisent un cookie HttpOnly, Secure, SameSite=Lax défini après la connexion. Utilisé pour les pages utilisateur et les API account/admin.
GET /api/user/profile
Cookie: auth_token=eyJhbGci...
# HttpOnly — not accessible via JS
# SameSite=Lax — CSRF protectionDPoP (RFC 9449) lie les jetons à une clé client spécifique. Envoyez le JWT de preuve DPoP avec le jeton d'accès. Empêche le vol et la réutilisation de jetons.
GET /api/oauth/userinfo
Authorization: DPoP eyJhbGci...
DPoP: eyJ0eXAiOiJkcG9wK2p3dCIs...
# Proof JWT includes htm, htu, iat, jtiLes endpoints de provisionnement SCIM s'authentifient via un jeton SCIM dédié par client OAuth. Le jeton est stocké sous forme de hachage SHA-256 et limité à une organisation.
GET /api/scim/v2/Users
Authorization: Bearer scim_token_abc123...
Content-Type: application/scim+jsonBibliothèques clientes officielles
SDK typés pour JavaScript et React avec PKCE, cycle de vie des jetons et déconnexion intégrés.
SDK JavaScript / TypeScript
@uniauth/js
Client JS vanilla avec PKCE, découverte OIDC, rafraîchissement automatique des jetons, erreurs typées et déconnexion avec révocation. Fonctionne dans Node.js et le navigateur.
npm install @uniauth/jsSDK React
@uniauth/react
Provider React, hooks et composants prêts à l'emploi : UniAuthProvider, useUser, LoginButton, LogoutButton, ProtectedRoute et UserProfile.
npm install @uniauth/reactLimites de débit par endpoint
Tous les endpoints sont soumis à une limitation de débit pour protéger la plateforme. Les limites se réinitialisent sur une fenêtre glissante de 15 minutes.
POST /api/auth/loginPOST /api/auth/registerPOST /api/auth/forgot-passwordPOST /api/auth/verify-*POST /api/scim/v2/BulkTous les autres endpointsLes en-têtes de limite de débit (X-RateLimit-Limit, X-RateLimit-Remaining, Retry-After) sont inclus dans chaque réponse. Quand Redis est configuré, les limites s'appliquent à toutes les instances du serveur.