Decision Gate Docs

Avaluació de portes determinista, reproduïble amb decisions auditable.

Asset Core docs

Arquitectura d’Autenticació/Autorització de Decision Gate + Divulgació

Audience: Engineers implementing or reviewing MCP authentication, Audiència: Enginyers que implementen o revisen el comportament d’autenticació, autorització i divulgació d’errors de MCP.


Taula de continguts

  1. Visió Executiva
  2. Context de la sol·licitud i identitat
  3. Modes d’autenticació
  4. Autenticació d’eines (Llista blanca)
  5. Autorització del llogater (connectable)
  6. Mesura d’ús i quotes (Plugable)
  7. Esdeveniments d’Auditoria d’Autenticació
  8. Postura de divulgació (JSON-RPC + HTTP)
  9. Limitació de Taxa i Respostes d’Overload
  10. File per Fitxer Referència Creuada

Executive Overview

Decision Gate MCP aplica una autenticació i autorització estrictes, amb fallada tancada, per a les crides d’eines. L’autenticació és conscient del transport (stdio, HTTP, SSE) i es configura a través de server.auth. L’autorització s’aplica per cada crida d’eina mitjançant DefaultToolAuthz, amb llistes d’eines opcionals. Una capa d’autorització de llogater separada i plugable pot aplicar l’abast de llogater/espai de noms abans de l’execució de l’eina. Les eines de cicle de vida tipades (typed_providers_import/register/list/get/activate/deprecate) ara requereixen camps d’abast de llogater/espai de noms explícits i sempre ruten el context d’abast a través de verificacions d’autorització + espai de noms + mesurament d’ús. typed_providers_import a més requereix un mapeig explícit de credential_bindings per a esquemes OpenAPI assegurats (locator + value_render), i el registre/importació d’artefactes tipats rebutja perfils d’execució que no són typed-runtime-v4. La reforçació de la importació primer en projecció s’aplica a aquesta frontera: les respostes complexes d’objecte/array JSON sense x-decision-gate.projections són rebutjades, i els camps de sol·licitud llegats eliminats (com ara response_projection_mode) són rebutjats com a paràmetres no vàlids. La resolució de credencials d’execució tipades es basa en localitzadors (secret:// i env:// tancats) amb el backend de secret local xifrat OSS com a resolutor per defecte. Els valors de credencials es desant crues; s’aplica un formatatge de cable determinista a partir de la metadada value_render d’autenticació tipada en temps d’execució. Les crides amb abast de proveïdor ara també passen provider_id a la costura d’autorització del llogater quan està disponible (eines de cicle de vida tipades i evidence_query), habilitant decisions RBAC a nivell de proveïdor en autoritzadors d’empresa sense bifurcacions OSS. Les decisions d’autorització emeten esdeveniments d’auditoria estructurats, i els errors de sol·licitud es mapejen a codis d’error JSON-RPC estables i codis d’estat HTTP per a una divulgació determinista i etiquetatge de mètriques. F:crates/decision-gate-mcp/src/auth.rs L293-L372 F:crates/decision-gate-mcp/src/tools/router.rs L1436-L1454 F:crates/decision-gate-mcp/src/tools/router.rs L2857-L2878 F:crates/decision-gate-mcp/src/server.rs L1984-L2017


Context de la sol·licitud i identitat

Context de la Sol·licitud

Les sol·licituds entrants es normalitzen en un RequestContext que registra el transport, l’IP del peer, l’encapçalament d’autenticació, el subjecte del client i un identificador de sol·licitud opcional, així com metadades de correlació. Per als transports HTTP/SSE, el context es construeix a partir de l’encapçalament Authorization i l’encapçalament x-decision-gate-client-subject per a la identitat del proxy mTLS. Els identificadors de correlació proporcionats pel client arriben a través de x-correlation-id i es tracten com a entrada insegura: es validen estrictament i es rebutgen si són invàlids. El servidor sempre emet el seu propi x-server-correlation-id i el retorna en les respostes, proporcionant un identificador estable i auditable fins i tot quan els IDs dels clients falten o són rebutjats. F:crates/decision-gate-mcp/src/auth.rs L82-L173 F:crates/decision-gate-mcp/src/server.rs L993-L1072 F:crates/decision-gate-mcp/src/server.rs L1648-L1734

Identitat Principal

AuthContext captura el mètode d’autenticació més un subjecte explícit o una empremta digital del token de portador. Si una sol·licitud només local no té subjecte, el subjecte es configura com a stdio o loopback segons el transport. Per als tokens de portador, s’calcula una empremta digital sha256 i s’utilitza com a etiqueta d’identitat estable. F:crates/decision-gate-mcp/src/auth.rs L181-L216 F:crates/decision-gate-mcp/src/auth.rs L503-L517


Modes d’autenticació

El mode d’autenticació es configura mitjançant server.auth.mode amb llistes d’acceptació de suport:

  • local_only: s’accepta stdio; HTTP/SSE només s’accepten per a IPs de loopback.
  • bearer_token: el bearer token ha de coincidir amb server.auth.bearer_tokens.
  • mtls: subject must be present in x-decision-gate-client-subject and match mtls: el subjecte ha d’estar present en x-decision-gate-client-subject i coincidir amb server.auth.mtls_subjects quan estigui configurat.

Superfície de configuració:

Detalls d’implementació:

  • Local només rebutja HTTP/SSE no de retroalimentació.
  • Bearer tokens are parsed with size and scheme validation; invalid/missing Els tokens de portador es processen amb validació de mida i esquema; els encapçalaments no vàlids/o que falten fallen en l’autenticació.
  • mTLS requires a subject; unauthorized subjects are rejected. mTLS requereix un subjecte; els subjectes no autoritzats són rebutjats. F:crates/decision-gate-mcp/src/auth.rs L479-L552

Autenticació d’Eines (Llista Permesa)

L’autorització d’eines s’aplica per sol·licitud per DefaultToolAuthz. Si server.auth.allowed_tools està configurat, qualsevol eina que no estigui a la llista d’autoritzacions és rebutjada amb un error d’no autoritzat. Els noms d’eines no vàlids a la llista d’autoritzacions es tracten com una configuració de fallada tancada (llista d’autoritzacions buida). F:crates/decision-gate-mcp/src/auth.rs L293-L372

Els resultats de l’autorització de l’eina són emesos pel router d’eines:


Autorització del llogater (connectable)

L’autorització de l’inquilí/espai de noms s’aplica mitjançant un ganxo TenantAuthorizer que es pot connectar. La implementació per defecte permet tot l’accés, però les implementacions empresarials poden proporcionar un autoritzador que vincula els principals amb els àmbits d’inquilí i espai de noms. L’autorització de l’inquilí s’executa després de les comprovacions de la llista d’eines permeses i abans de l’execució de l’eina. Les denegacions d’inquilí emeten esdeveniments d’auditoria dedicats (tenant_authz).

Referències d’implementació:


Mesura d’Ús i Quotes (Connectables)

El mesurament d’ús i les comprovacions de quota són aplicades per un ganxo UsageMeter que es pot connectar. La implementació per defecte és un no-op, però les implementacions empresarials poden subministrar un mesurador que aplica quotes i registra l’ús de grau de facturació. Les comprovacions d’ús s’executen abans de l’execució de l’eina; les denegacions emeten esdeveniments usage_audit.

Referències d’implementació:


Esdeveniments d’Auditoria d’Autenticació

Les decisions d’autenticació emeten esdeveniments d’auditoria JSON estructurats amb detalls sobre el transport, el subjecte, el mètode i la raó de fallada. El registre d’auditoria per defecte registra línies JSON a stderr; les proves poden utilitzar un registre sense operacions. F:crates/decision-gate-mcp/src/auth.rs L379-L445


Postura de divulgació (JSON-RPC + HTTP)

Divulgació de Feedback (scenario_next)

Les respostes scenario_next són només un resum per defecte. Els nivells de retroalimentació opcionals (trace, evidence) estan subjectes a la política server.feedback.scenario_next, amb verificacions de rol/subjecte resoltes a partir de server.auth.principals. La retroalimentació d’evidència encara es filtra a través de la política de divulgació d’evidències (els valors en brut poden ser esborrats llevat que s’autoritzi explícitament). F:crates/decision-gate-config/src/config.rs L452-L545 F:crates/decision-gate-mcp/src/tools/router.rs L2144-L2257

JSON-RPC Error Envelope

El servidor MCP respon amb codis d’error JSON-RPC i metadades estructurades (kind, retryable, request_id, retry_after_ms opcional). Els tipus d’error són etiquetes estables utilitzades per a mètriques i categorizació d’auditories. F:crates/decision-gate-mcp/src/server.rs L1961-L2043

Mapeig d’Errors (Errors de l’Eina)

Els errors de l’eina es mapegen a l’estat HTTP + codis d’error JSON-RPC:

ToolErrorHTTPJSON-RPC CodeMessage
NoAutenticat401-32001no autenticat
NoAutoritzat403-32003no autoritzat
ParamsInvàlids400-32602missatge proporcionat
ViolacióDeCapacitat400-32602codi: missatge
EinaDesconeguda400-32601eina desconeguda
Resposta massa gran200-32070missatge proporcionat
LimitatPerTaxa200-32071missatge proporcionat
NoTrobat200-32004missatge proporcionat
Conflicte200-32009missatge proporcionat
Prova200-32020missatge proporcionat
PlaDeControl200-32030missatge proporcionat
ExecutarPaquet200-32040missatge proporcionat
Intern200-32050missatge proporcionat
Serialització200-32060la serialització ha fallat

Aquests mapeigs s’implementen en jsonrpc_error. F:crates/decision-gate-mcp/src/server.rs L1984-L2015

Divulgació d’Importació OpenAPI Tipada

typed_providers_import i el registre d’artefactes tipats retornen fallades deterministes InvalidParams per violacions de política/entrada:

  • unsupported OpenAPI security constructs include explicit taxonomy metadata (unsupported_code, text de remediació) en missatges de rebuig;
  • els camps credential_bindings que falten i els mapes de esquema segur buits són rebutjats abans de la importació;
  • els perfils de runtime no-typed-runtime-v4 són rebutjats abans de la registració.

F:crates/decision-gate-mcp/src/tools/router.rs L3798-L3830 F:crates/decision-gate-mcp/src/tools/router.rs L5112-L5160 F:crates/decision-gate-mcp/src/tools/router.rs L5259-L5263

Capçalera del Repte d’Autenticació (RFC 6750)

Les respostes HTTP/SSE per a sol·licituds no autenticades inclouen un capçalera WWW-Authenticate amb un àmbit Bearer quan l’autenticació amb token Bearer està habilitada. Això s’alinea amb l’RFC 6750 i manté els desafiaments d’autenticació explícits sense filtrar detalls de validació del token. F:crates/decision-gate-mcp/src/auth.rs L46-L75 F:crates/decision-gate-mcp/src/server.rs L1706-L1718

Encapçalaments de Correlació

Les respostes HTTP/SSE sempre inclouen un x-server-correlation-id emès pel servidor. Si el client proporciona un x-correlation-id vàlid, es retorna. Els IDs de correlació del client invàlids són rebutjats abans de l’anàlisi de la sol·licitud i no es retornen. El rebuig de correlació invàlida utilitza HTTP 400 amb el codi d’error JSON-RPC -32073 (invalid_correlation_id). F:crates/decision-gate-mcp/src/server.rs L993-L1072 F:crates/decision-gate-mcp/src/server.rs L1648-L1749

Errors en la Anàlisi de Sol·licituds

Versions de JSON-RPC no vàlides, mètodes desconeguts i cossos de sol·licitud mal formats són rebutjats amb codis d’error estàndard de JSON-RPC i HTTP 400. F:crates/decision-gate-mcp/src/server.rs L1505-L1583


Limitació de Taxa i Respostes d’Overload

El servidor imposa:

  • Inflight request limits (reject with 503 and -32072, kind inflight_limit, codi de raó dg.server.inflight_limit_exhausted.
  • Rate-window limiting (reject with 429 and -32071, kind rate_limited, reason code dg.server.rate_limit_window_exhausted, including retry-after pistes).
  • Rate-limiter capacity saturation (reject with 503 and -32074, kind rate_limiter_capacity, reason code dg.server.rate_limiter_capacity_exhausted).
  • Límits de mida de càrrega útil (rebutjar amb 413 i -32070).

Els controls d’execució de sortida del proveïdor tipat són separats dels controls d’entrada de MCP i s’apliquen mitjançant una política de temps d’execució tipada (outbound_max_inflight, reintents limitats/retrasos).

Aquests errors es reporten amb metadades d’error JSON-RPC estructurades i es marquen com a reintents quan és apropiat. F:crates/decision-gate-mcp/src/server.rs L1688-L1760 F:crates/decision-gate-mcp/src/server.rs L2150-L2250 F:crates/decision-gate-providers/src/typed.rs L448-L463 F:crates/decision-gate-providers/src/typed.rs L958-L980


File per Fitxer Referència Creuada

ÀreaFitxerNotes
Superfície de configuració d’autenticaciócrates/decision-gate-config/src/config.rsModes d’autenticació, llistes blanques de tokens/subjectes, llista blanca d’eines.
Motor de polítiques d’autenticaciócrates/decision-gate-mcp/src/auth.rsDefaultToolAuthz, modes d’autenticació, esdeveniments d’auditoria, anàlisi de tokens.
Integració d’autenticació d’einescrates/decision-gate-mcp/src/tools/router.rsAutenticació per trucada + emissió d’auditoria.
Interfície d’autenticació de llogatercrates/decision-gate-mcp/src/tenant_authz.rsSeam d’autenticació de llogater/namespace connectable.
Interfície de mesurament d’úscrates/decision-gate-mcp/src/usage.rsSeam de mesurament d’ús connectable + aplicació de quotes.
Divulgació JSON-RPCcrates/decision-gate-mcp/src/server.rsMapeig d’errors i codis de resposta.