Authentification
S'authentifier auprès des APIs M&NTIS
Les APIs REST M&NTIS (dont l'API Scenario) sont protégées par OpenID Connect (Keycloak). Chaque requête doit porter un jeton d'accès valide dans un en-tête Authorization: Bearer <token>, ainsi que quelques en-têtes de contexte identifiant l'espace de travail / l'organisation.
Endpoints
Pour un déploiement sur le domaine <votre-domaine> (ex. mantis-platform.io) :
| Rôle | URL |
|---|---|
| Base de l'API (Scenario) | https://app.<votre-domaine>/api/scenario/lab |
| Émetteur OpenID Connect | https://id.<votre-domaine>/realms/mantis |
| Document de découverte OIDC | https://id.<votre-domaine>/realms/mantis/.well-known/openid-configuration |
| Endpoint de jeton | https://id.<votre-domaine>/realms/mantis/protocol/openid-connect/token |
Le document de découverte liste les endpoints et scopes exacts de votre déploiement. Demandez à votre administrateur M&NTIS un client OIDC (et, pour une intégration machine-à-machine, un secret client ou un compte de service).
1. Obtenir un jeton d'accès
# Grant « resource owner password » (ou bien refresh_token / client_credentials,
# selon la configuration de votre client OIDC).
curl -X POST "https://id.mantis-platform.io/realms/mantis/protocol/openid-connect/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=password" \
-d "client_id=<votre-client-id>" \
-d "username=<votre-identifiant>" \
-d "password=<votre-mot-de-passe>"
# -> {"access_token": "...", "refresh_token": "...", "expires_in": 300, ...}import requests
OIDC = "https://id.mantis-platform.io/realms/mantis/protocol/openid-connect/token"
def get_access_token(client_id: str, username: str, password: str) -> str:
resp = requests.post(
OIDC,
data={
"grant_type": "password",
"client_id": client_id,
"username": username,
"password": password,
},
)
resp.raise_for_status()
return resp.json()["access_token"]Les jetons d'accès ont une durée de vie courte (quelques minutes). Conservez le refresh_token et échangez-le contre un nouveau jeton d'accès si besoin (grant_type=refresh_token), comme le fait le CLI mantis (mantis_api_client/mantis_api_client/oidc.py).
2. Appeler l'API avec le jeton
Passez le jeton en en-tête Bearer. La plupart des endpoints Scenario attendent aussi un en-tête workspace (et optionnellement organisation), afin que la plateforme puisse résoudre votre quota de labs et vos permissions :
| En-tête | Valeur |
|---|---|
Authorization | Bearer <access_token> |
X-Workspace-Id | votre identifiant d'espace de travail |
X-Organization-Id | votre identifiant d'organisation (optionnel) |
curl "https://app.mantis-platform.io/api/scenario/lab/version" \
-H "Authorization: Bearer $TOKEN"
curl "https://app.mantis-platform.io/api/scenario/lab/scenario/" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Workspace-Id: $WORKSPACE_ID"import requests
BASE = "https://app.mantis-platform.io/api/scenario/lab"
def api_headers(token: str, workspace_id: str) -> dict:
return {
"Authorization": f"Bearer {token}",
"X-Workspace-Id": workspace_id,
}
resp = requests.get(f"{BASE}/scenario/", headers=api_headers(TOKEN, WORKSPACE_ID))
resp.raise_for_status()
print(resp.json())Certains endpoints de lancement de scénario exigent en plus que le jeton porte des scopes spécifiques (ex. scenario:run). Ils sont indiqués par opération dans la référence de l'API et vérifiés côté serveur.
3. Liens d'accès public (avancé)
Lors de la création d'un lab avec public_access_enabled: true, le client réalise un échange de jeton OIDC pour générer un jeton dédié au lien public, transmis dans le corps de la requête via public_access_config. Voir exchange_token_public_access() dans mantis_authz et create_lab_scenario() dans le client de référence pour le déroulé exact.
Étape suivante
Passez au Démarrage rapide pour lancer un lab de bout en bout.

