API Applications
Les applications dans Auris représentent des apps client ou des services qui s’intègrent avec la plateforme IAM — web apps, apps mobile, serveurs API, CLI et services machine-to-machine. Chaque application a un Client ID (toujours visible) et optionnellement un Client Secret (pour les clients confidentiels). Auris supporte quatre types d’application : WEB, MOBILE, API et M2M.
Tous les endpoints de cette section nécessitent la permission manage:applications et le header x-tenant.
CRUD Applications
/api/applicationsRequires: manage:applicationsListe toutes les applications enregistrées dans le tenant. Retourne les informations de résumé pour chaque application incluant le type, le Client ID, les URI de redirect autorisés et la date de création.
Paramètres de query
| Paramètre | Type | Description |
|---|---|---|
page | integer | Numéro de page (défaut : 1) |
limit | integer | Éléments par page (défaut : 20) |
type | WEB | MOBILE | API | M2M | Filtre par type d’application |
search | string | Recherche par nom d’application |
Réponse de succès
{
"ok": true,
"data": {
"data": [
{
"id": "app_abc123",
"name": "Mon Application Web",
"type": "WEB",
"clientId": "cid_abc123",
"redirectUris": ["https://app.votredomaine.com/callback"],
"allowedOrigins": ["https://app.votredomaine.com"],
"createdAt": "2025-01-10T08:00:00Z"
}
],
"pagination": { "page": 1, "limit": 20, "total": 3, "totalPages": 1 }
}
}/api/applicationsRequires: manage:applicationsCrée une nouvelle application. Pour les types WEB et MOBILE, les redirectUris doivent être fournis. Pour le type M2M, les redirectUris ne sont pas requis mais les scopes M2M doivent être configurés séparément. Un clientSecret est généré automatiquement et retourné uniquement dans la réponse de création — conserve-le en sécurité. Il ne peut pas être récupéré à nouveau ; utilise la rotation des secrets pour en générer un nouveau.
Corps de la requête
{
"name": "Mon Dashboard",
"type": "WEB",
"redirectUris": [
"https://app.votredomaine.com/callback",
"http://localhost:3000/callback"
],
"allowedOrigins": [
"https://app.votredomaine.com",
"http://localhost:3000"
]
}Réponse de succès
{
"ok": true,
"data": {
"id": "app_def456",
"name": "Mon Dashboard",
"type": "WEB",
"clientId": "cid_def456",
"clientSecret": "cs_sk_...",
"redirectUris": ["https://app.votredomaine.com/callback", "http://localhost:3000/callback"],
"allowedOrigins": ["https://app.votredomaine.com", "http://localhost:3000"],
"createdAt": "2025-02-18T12:00:00Z"
}
}Le clientSecret est retourné une seule fois au moment de la création. Sauvegarde-le immédiatement. Pour les clients publics (SPA browser et apps mobile), n’utilise pas le clientSecret — utilise PKCE à la place.
Codes d’erreur
| Code | HTTP | Description |
|---|---|---|
NAME_TAKEN | 409 | Une application avec ce nom existe déjà |
VALIDATION_ERROR | 400 | Format d’URI de redirect invalide ou champ obligatoire manquant |
/api/applications/[id]Requires: manage:applicationsObtient les détails complets d’une seule application, incluant tous les champs de configuration. Le clientSecret n’est jamais retourné après la création — utilise la rotation pour en générer un nouveau.
Réponse de succès
{
"ok": true,
"data": {
"id": "app_abc123",
"name": "Mon Application Web",
"type": "WEB",
"clientId": "cid_abc123",
"redirectUris": ["https://app.votredomaine.com/callback"],
"allowedOrigins": ["https://app.votredomaine.com"],
"enableDeviceFlow": false,
"enableCiba": false,
"enableDpop": false,
"enableM2m": false,
"createdAt": "2025-01-10T08:00:00Z",
"updatedAt": "2025-02-01T15:30:00Z"
}
}/api/applications/[id]Requires: manage:applicationsMet à jour la configuration d’une application. Tous les champs sont optionnels — seuls les champs fournis sont mis à jour.
Corps de la requête
{
"name": "Mon Application Web v2",
"redirectUris": [
"https://app.votredomaine.com/callback",
"https://staging.votredomaine.com/callback"
],
"allowedOrigins": [
"https://app.votredomaine.com",
"https://staging.votredomaine.com"
],
"enableDeviceFlow": false
}/api/applications/[id]Requires: manage:applicationsSupprime une application. Cela révoque tous les tokens actifs émis pour l’application. Cette action ne peut pas être annulée.
Réponse de succès
{
"ok": true,
"data": { "deleted": true }
}Rotation des Secrets
/api/applications/[id]?action=rotate-secretRequires: manage:applicationsGénère un nouveau client secret pour l’application, invalidant immédiatement le précédent. Le nouveau secret est retourné une seule fois. Toutes les intégrations utilisant l’ancien secret doivent être mises à jour.
La rotation du secret invalide immédiatement le précédent. Tous les tokens M2M actifs obtenus avec l’ancien secret continuent de fonctionner jusqu’à leur expiration, mais aucun nouveau token ne peut être obtenu.
Requête : Aucun corps requis.
Réponse de succès
{
"ok": true,
"data": {
"clientId": "cid_abc123",
"clientSecret": "cs_sk_new...",
"rotatedAt": "2025-02-18T14:00:00Z"
}
}Claims JWT Personnalisés
Les claims personnalisés permettent d’injecter des données supplémentaires dans les access tokens émis par une application spécifique. Les claims sont résolus au moment de l’émission du token et incorporés dans le payload JWT.
Types de Valeur
| Type | Description | Exemple |
|---|---|---|
STATIC | Valeur string fixe | "plan": "enterprise" |
USER_ATTRIBUTE | Valeur depuis l’attribut du profil utilisateur | "email": user.email |
ROLE_BASED | Valeur qui change selon les rôles de l’utilisateur | "tier": "admin" si rôle admin |
EXPRESSION | Expression personnalisée évaluée à l’exécution | user.roles.includes('admin') ? 'full' : 'read' |
Les claims JWT réservés (sub, iss, aud, exp, iat, jti, type, email, roles) ne peuvent pas être écrasés par des claims personnalisés.
/api/applications/[id]/custom-claimsRequires: manage:applicationsListe tous les claims personnalisés configurés pour une application.
Réponse de succès
{
"ok": true,
"data": [
{
"id": "claim_abc",
"claimKey": "plan",
"valueType": "STATIC",
"staticValue": "enterprise",
"isActive": true
},
{
"id": "claim_def",
"claimKey": "orgId",
"valueType": "USER_ATTRIBUTE",
"userAttribute": "organizationId",
"isActive": true
}
]
}/api/applications/[id]/custom-claimsRequires: manage:applicationsCrée un nouveau claim personnalisé pour une application.
Corps de la requête — Claim statique
{
"claimKey": "plan",
"valueType": "STATIC",
"staticValue": "enterprise"
}Corps de la requête — Claim attribut utilisateur
{
"claimKey": "department",
"valueType": "USER_ATTRIBUTE",
"userAttribute": "department"
}Corps de la requête — Claim basé sur le rôle
{
"claimKey": "accessLevel",
"valueType": "ROLE_BASED",
"roleMapping": {
"admin": "full",
"editor": "write",
"viewer": "read"
}
}Corps de la requête — Claim expression
{
"claimKey": "isPremium",
"valueType": "EXPRESSION",
"expression": "user.roles.includes('premium') || user.roles.includes('admin')"
}Codes d’erreur
| Code | HTTP | Description |
|---|---|---|
CLAIM_KEY_RESERVED | 400 | La clé du claim est un champ JWT réservé |
CLAIM_KEY_TAKEN | 409 | Un claim avec cette clé existe déjà pour cette application |
/api/applications/[id]/custom-claims/[claimId]Requires: manage:applicationsMet à jour un claim personnalisé. Supporte les mises à jour partielles — seuls les champs fournis sont modifiés.
/api/applications/[id]/custom-claims/[claimId]Requires: manage:applicationsSupprime un claim personnalisé. Le claim n’apparaîtra plus dans les tokens émis après la suppression.
/api/applications/[id]/custom-claims/previewRequires: manage:applicationsAperçu de comment les claims personnalisés seraient résolus pour un utilisateur spécifique. Utile pour tester la configuration des claims sans émettre un vrai token.
Corps de la requête
{
"userId": "usr_abc123"
}Réponse de succès
{
"ok": true,
"data": {
"userId": "usr_abc123",
"resolvedClaims": {
"plan": "enterprise",
"department": "Engineering",
"accessLevel": "write",
"isPremium": false
}
}
}Scopes M2M
Les scopes M2M (Machine-to-Machine) définissent ce que peut faire un token client_credentials. Les scopes sont des chaînes libres que ton resource server valide.
/api/applications/[id]/m2m-scopesRequires: manage:applicationsListe les scopes M2M configurés pour une application.
Réponse de succès
{
"ok": true,
"data": {
"scopes": ["read:users", "manage:roles"],
"allowedScopes": ["read:users", "manage:roles", "read:audit-logs"]
}
}scopes sont les scopes par défaut émis quand scope n’est pas spécifié dans la requête de token. allowedScopes sont tous les scopes que l’application est autorisée à demander.
/api/applications/[id]/m2m-scopesRequires: manage:applicationsConfigure les scopes M2M pour une application. Remplace complètement la configuration des scopes existante.
Corps de la requête
{
"scopes": ["read:users"],
"allowedScopes": ["read:users", "read:audit-logs"]
}Pages Associées
- OAuth 2.0 & OIDC — Standards de protocole que les applications implémentent
- Claims JWT Personnalisés — Configure les claims par application dans les access tokens
- Credentials M2M Client — Authentification serveur-à-serveur pour les apps M2M
- Applications — Gère les applications depuis la Console