Aller au contenu principal

Référence ExecutionContext

English version: ../../en/guides/execution-context.md

Cette page décrit l'ExecutionContext signé que reçoit chaque exécution, comment l'autorité de contexte l'émet et le vérifie, et comment valider un document selon son contrat. Qui : développeurs d'agents, d'outils et de serveurs MCP qui doivent vérifier pour qui ils agissent, et responsables de la sécurité.

Contrat​

Le schéma est contracts/v1/execution-context.schema.json (Execution Context v1). Champs obligatoires : schema_version, execution, tenant, identity, workload_identity, delegation, authorization, security, limits, audit, context_integrity. Champs optionnels : agent, data_governance, models, prompts, tools, rag, multimodal, approvals, storage, observability, finops, runtime_control.

Blocs principaux​

execution : execution_id, environment, started_at, status, entrypoint (obligatoires), plus request_id, correlation_id, deadline_at. tenant : tenant_id obligatoire, organization_id, project_id. identity : subject_id, subject_type, provider, token_reference. authorization : enforcement, default_decision, fail_closed, plus openfga, opa, effective_rights, break_glass. limits : max_duration_seconds, max_steps, max_subagents, max_depth, max_tool_calls, max_cost, heartbeat_seconds. context_integrity : issuer, issued_at, expires_at, audience, canonicalization, signing_algorithm, key_id, signature.

Émission et vérification​

L'autorité de contexte (services/control-plane/src/eai/domains/context/authority.py) signe un JWS compact dont l'en-tête et la charge sont du JSON canonique RFC 8785, en ES256 ou EdDSA. Routes : POST /v1/context/issue, POST /v1/context/verify, GET /v1/context/jwks (vérification hors ligne), POST /v1/context/{context_id}/revoke. La durée de vie par défaut est EAI_CONTEXT_TTL_SECONDS (900 s), bornée par EAI_CONTEXT_MAX_TTL_SECONDS (3600 s) et par la délégation ; la clé est référencée par EAI_CONTEXT_SIGNING_KEY_REF. Sans clé, l'émission échoue fermée (503 context_authority_unavailable).

const ctx = await client.context.issue({ run_id: "run_1", ttl_seconds: 300 });
await client.context.verify({ token: String(ctx.token) });
const jwks = await client.context.jwks();

Procédures​

  1. Émettre un contexte pour une exécution. L'exécution et chaque outil qu'elle appelle partagent alors une même déclaration signée du tenant, de l'identité, de la délégation et des limites.

    API : POST /v1/context/issue avec run_id, et en option delegation_id, audience et ttl_seconds.

    Résultat attendu : un jeton dont la durée de vie est ttl_seconds (EAI_CONTEXT_TTL_SECONDS par défaut), ramenée à l'expiration de la délégation quand elle finit plus tôt.

    En cas d'échec : 400 context_ttl_exceeded signale un ttl_seconds inférieur à 30 ou supérieur à EAI_CONTEXT_MAX_TTL_SECONDS ; 503 context_authority_unavailable signale qu'aucune clé de signature n'est utilisable ; 403 delegation_expired signale une délégation qui finit avant le début possible du contexte.

  2. Vérifier un contexte reçu par un outil. Un outil ou un serveur MCP ne fait jamais confiance à un contexte qu'il n'a pas vérifié : signature, émetteur, audience, durée de vie, tenant et révocation sont tous contrôlés.

    API : POST /v1/context/verify avec le token. Hors ligne : récupérez une fois les clés publiques avec GET /v1/context/jwks et vérifiez le JWS localement.

    Résultat attendu : le document décodé, chaque contrôle réussi.

    En cas d'échec : 401 avec l'un des codes du tableau de dépannage ; chaque refus écrit un événement d'audit context.verify.

  3. Révoquer un contexte. La révocation met fin à un contexte avant son expiration, par exemple quand une exécution est arrêtée ou qu'un identifiant fuit.

    API : POST /v1/context/{context_id}/revoke. Les clés de signature se listent avec GET /v1/context/keys et se révoquent avec POST /v1/context/keys/{kid}/revoke.

    Résultat attendu : la vérification suivante de ce contexte répond 401 context_revoked.

    En cas d'échec : 404 context_not_found signale un contexte inconnu ; 403 forbidden signale que vous ne l'avez pas créé et ne détenez ni tenant_admin ni security_officer.

  4. Valider un document selon le contrat. Utilisez-le dans vos tests pour prouver que les documents construits ou conservés suivent le schéma ; voir la section suivante.

    Résultat attendu : le document est valide.

    En cas d'échec : la CLI liste chaque erreur avec son chemin JSON.

Réglages​

RéglageDéfautRôle
EAI_CONTEXT_TTL_SECONDS900durée de vie par défaut d'un contexte
EAI_CONTEXT_MAX_TTL_SECONDS3600borne haute d'une durée de vie et de la fenêtre d'une clé retirée
EAI_CONTEXT_SIGNING_KEY_REFaucunréférence de la clé de signature
EAI_CONTEXT_ISSUERurn:eai:context-authorityémetteur écrit dans le jeton et contrôlé
EAI_CONTEXT_AUDIENCESeai-control-planeaudiences acceptées par POST /v1/context/verify, séparées par des virgules
EAI_CONTEXT_LEEWAY_SECONDS30tolérance d'horloge des contrôles de durée de vie
EAI_CONTEXT_REQUIREDfalsechaque exécution exige un contexte signé

Valider un document​

Un ExecutionContext se valide localement avec le SDK ou à distance avec POST /v1/contracts/{name}/validate.

enterprise-ai validate -f context.json --contract execution-context

Dépannage​

StatutCodeCauseCorrection
503context_authority_unavailableaucune clé de signature utilisableconfigurez EAI_CONTEXT_SIGNING_KEY_REF
400context_ttl_exceededdurée de vie sous 30 s ou au-dessus du maximumdemandez une durée dans les bornes
400, 401context_wrong_audienceaucune audience, ou une audience non acceptéeutilisez une audience de EAI_CONTEXT_AUDIENCES
401context_malformedstructure, encodage ou durée de vie abîmésenvoyez le jeton tel qu'émis
401context_invalid_signaturealgorithme, signature ou empreinte fauxle jeton a été modifié : refusez-le
401context_unknown_keyidentifiant de clé absent du JWKSrelisez GET /v1/context/jwks
401context_wrong_issuerémetteur différent de EAI_CONTEXT_ISSUERvérifiez la plateforme émettrice
401context_expireddurée de vie écouléeémettez un nouveau contexte
401context_revokedcontexte ou délégation révoquéarrêtez l'action ; n'émettez un nouveau contexte qu'avec une délégation valide
403context_tenant_mismatchcontexte d'un autre tenantutilisez l'identifiant du bon tenant

Étapes suivantes​