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
- Visió Executiva
- Context de la sol·licitud i identitat
- Modes d’autenticació
- Autenticació d’eines (Llista blanca)
- Autorització del llogater (connectable)
- Mesura d’ús i quotes (Plugable)
- Esdeveniments d’Auditoria d’Autenticació
- Postura de divulgació (JSON-RPC + HTTP)
- Limitació de Taxa i Respostes d’Overload
- File per Fitxer Referència Creuada
Executive Overview
Decision Gate MCP imposa una autenticació i autorització estrictes i de 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 imposar l’abast de llogater/espai de noms abans de l’execució de l’eina. Les decisions d’autenticació emeten esdeveniments d’auditoria estructurats, i els errors de sol·licitud es mapegen 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.rs L1436-L1454 F:crates/decision-gate-mcp/src/tools.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 ambserver.auth.bearer_tokens.mtls: subject must be present inx-decision-gate-client-subjectand matchmtls: el subjecte ha d’estar present enx-decision-gate-client-subjecti coincidir ambserver.auth.mtls_subjectsquan estigui configurat.
Superfície de configuració:
server.auth.mode,bearer_tokens,mtls_subjects,allowed_tools.server.auth.mode,bearer_tokens,mtls_subjects,allowed_tools. F:crates/decision-gate-config/src/config.rs L789-L937
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:
AuthAuditEvent::alloweden cas d’èxitAuthAuditEvent::deniedon failureAuthAuditEvent::denieden cas de fallida F:crates/decision-gate-mcp/src/tools.rs L3131-L3144 F:crates/decision-gate-mcp/src/auth.rs L379-L445
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ó:
- Interfície d’autenticació del llogater: F:crates/decision-gate-mcp/src/tenant_authz.rs L29-L65
- Execució i emissió d’auditories: F:crates/decision-gate-mcp/src/tools.rs L2857-L2935
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ó:
- Interfície de mesura d’ús: F:crates/decision-gate-mcp/src/usage.rs L28-L105
- Execució i emissió d’auditories: F:crates/decision-gate-mcp/src/tools.rs L2937-L2999
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 de scenario_next són només un resum per defecte. Els nivells de retroalimentació opcionals (trace, evidence) estan regulats per 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.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:
| ToolError | HTTP | JSON-RPC Code | Message |
|---|---|---|---|
| NoAutenticat | 401 | -32001 | no autenticat |
| NoAutoritzat | 403 | -32003 | no autoritzat |
| ParamsInvàlids | 400 | -32602 | missatge proporcionat |
| ViolacióDeCapacitat | 400 | -32602 | codi: missatge |
| EinaDesconeguda | 400 | -32601 | eina desconeguda |
| Resposta massa gran | 200 | -32070 | missatge proporcionat |
| LimitatPerTaxa | 200 | -32071 | missatge proporcionat |
| NoTrobat | 200 | -32004 | missatge proporcionat |
| Conflicte | 200 | -32009 | missatge proporcionat |
| Prova | 200 | -32020 | missatge proporcionat |
| PlaDeControl | 200 | -32030 | missatge proporcionat |
| ExecutarPaquet | 200 | -32040 | missatge proporcionat |
| Intern | 200 | -32050 | missatge proporcionat |
| Serialització | 200 | -32060 | la serialització ha fallat |
Aquests mapeigs s’implementen en jsonrpc_error. F:crates/decision-gate-mcp/src/server.rs L1984-L2015
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:
- Límits de sol·licitud en vol (rebutjar amb 503 i
-32072). - Limitació de taxa (rebutjar amb 429 i
-32071, incloent pistes de retry-after). - Límits de mida de càrrega útil (rebutjar amb 413 i
-32070).
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 L1505-L1568 F:crates/decision-gate-mcp/src/server.rs L2051-L2053
File per Fitxer Referència Creuada
| Àrea | Fitxer | Notes |
|---|---|---|
| Superfície de configuració d’autenticació | crates/decision-gate-config/src/config.rs | Modes d’autenticació, llistes permeses de tokens/subjectes, llista permesa d’eines. |
| Motor de política d’autenticació | crates/decision-gate-mcp/src/auth.rs | DefaultToolAuthz, modes d’autenticació, esdeveniments d’auditoria, anàlisi de tokens. |
| Integració d’autenticació d’eines | crates/decision-gate-mcp/src/tools.rs | Autorització per trucada + emissió d’auditoria. |
| Interfície d’autorització de llogater | crates/decision-gate-mcp/src/tenant_authz.rs | Seam d’autorització de llogater/namespace connectable. |
| Interfície de mesurament d’ús | crates/decision-gate-mcp/src/usage.rs | Seam de mesurament d’ús connectable + aplicació de quotes. |
| Divulgació JSON-RPC | crates/decision-gate-mcp/src/server.rs | Mapeig d’errors i codis de resposta. |