
# Créer un jeton de gestion pour la CLI

`POST https://api.keenauth.com/v1/environments/{environment_id}/management-tokens` · appelé par `keenauth login`

Échange la connexion de la CLI contre un jeton de 10 minutes pour un environnement. Vous n'appelez pas ce point de terminaison vous-même : `keenauth login` vous connecte avec votre compte du tableau de bord (autorisation par appareil ou, avec `--web`, redirection loopback avec PKCE) et la CLI demande un jeton pour chaque environnement sur lequel elle travaille. Le jeton est lié à la clé de la CLI (DPoP) et ne porte que les autorisations de votre rôle du tableau de bord dans cet environnement.

## Demande

En-têtes :

| En-tête | Requis | Description |
| --- | --- | --- |
| `Authorization` | oui | `DPoP <access token>` : le jeton d'accès reçu par la CLI lors de votre connexion. |
| `DPoP` | oui | Une preuve DPoP pour cette requête, signée avec la clé à laquelle le jeton d'accès est lié ; elle contient le hachage du jeton d'accès et le nonce du serveur. |
| `Content-Type` | oui | `application/json`. |

Corps : un objet JSON vide, `{}`. Tout autre membre est refusé avec `unknown_field`. La requête n'a pas d'`Idempotency-Key` : chaque appel émet un nouveau jeton.

## Réponse

`201 Created` avec `Cache-Control: no-store` :

| Champ | Description |
| --- | --- |
| `access_token` | Le jeton de gestion. Envoyez-le sous la forme `Authorization: DPoP <token>` avec une preuve de la même clé. |
| `token_type` | Toujours `DPoP`. |
| `expires_in` | Durée de vie en secondes : `600`. |
| `expires_at` | Fin de la durée de vie (RFC 3339, UTC). |
| `environment_id` | L'environnement pour lequel le jeton est émis. |
| `audience` | La cellule pour laquelle le jeton est émis (`<region>/<cell>`). |
| `api_base` | URL de base de l'API régionale qui accepte le jeton. |
| `permissions` | Les autorisations de l'environnement accordées par votre rôle du tableau de bord. |

La CLI ne conserve le jeton qu'en mémoire. Un changement de rôle prend effet dans 10 minutes au plus ; lorsqu'un rôle est retiré, les jetons ouverts de cet utilisateur sont révoqués.

## Erreurs

| HTTP | Code | Quand |
| --- | --- | --- |
| 401 | `unauthenticated` | Aucun jeton d'accès n'a été envoyé. |
| 401 | `invalid_token` | Le jeton d'accès est invalide, expiré ou n'appartient pas à la CLI ; reconnectez-vous avec `keenauth login`. |
| 401 | `invalid_dpop_proof` | La preuve DPoP est absente, répétée, ou ne correspond ni à la requête ni à la clé du jeton. |
| 401 | `use_dpop_nonce` | Réessayez avec une preuve qui porte le nonce de l'en-tête de réponse `DPoP-Nonce`. |
| 401 | `insufficient_user_authentication` | L'authentification multifacteur (ou, pour votre rôle, une clé d'accès ou une clé de sécurité) est requise ; reconnectez-vous. |
| 404 | `not_found` | L'environnement n'existe pas ou vous n'avez aucun rôle du tableau de bord dans cet environnement. |
| 429 | `rate_limited` | Plus de 30 jetons par minute pour votre utilisateur (partagé avec le tableau de bord) ; respectez `Retry-After`. |

## Exemple

```bash
curl -X POST https://api.keenauth.com/v1/environments/env_01jb0000000000000000000000/management-tokens \
  -H "Authorization: DPoP $ACCESS_TOKEN" \
  -H "DPoP: $DPOP_PROOF" \
  -H "Content-Type: application/json" \
  -d '{}'
```
