Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

centralize role resolution across all MCP tools

Aperta
#3,757 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
55/100
Tipo di issue
Refactoring
Chiarezza
Specificata chiaramente
Stato di attività
Tranquilla
Stack tecnologico
csharp

Direzione di ricerca

Leggi McpAuthorizationHelper e gli otto punti di ingresso denominati degli strumenti MCP, quindi confronta le modifiche esistenti di allineamento e sicurezza in PR #3737. Verifica che l’header del ruolo venga letto solo in McpAuthorizationHelper, che nessun codice MCP lo suddivida, che ogni strumento utilizzi TryResolveValidatedRole e che i test esistenti passino.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

mcp-server

Related PR: #3737 — MSRC 31000000666371: MCP describe_entities info-disclosure fix + single-role alignment

Proposed fix

Add a single choke point on McpAuthorizationHelper that every MCP tool calls to obtain the caller's role:

public static bool TryResolveValidatedRole(
    HttpContext httpContext,
    IAuthorizationResolver authResolver,
    out string? role);

Behavior:

  • Delegates validation to IAuthorizationResolver.IsValidRoleContext (exactly-one non-empty header value + HttpContext.User.IsInRole(header)).
  • Returns the validated X-MS-API-ROLE header value verbatim as the single role for the request.
  • Is the only place any MCP code reads AuthorizationResolver.CLIENT_ROLE_HEADER.

Then refactor every MCP tool to call it: DescribeEntitiesTool, AggregateRecordsTool, CreateRecordTool, DeleteRecordTool, ExecuteEntityTool, ReadRecordsTool, UpdateRecordTool, DynamicCustomTool.

Design

  • Single-role model. X-MS-API-ROLE is one atomic role. No splitting, no unioning. Matches REST, GraphQL, and DAB's existing ClientRoleHeaderAuthorizationMiddleware.
  • Resolver-owned inheritance. Per-entity authorization goes through IAuthorizationResolver.AreRoleAndOperationDefinedForEntity / GetAllowedExposedColumns, so anonymous → authenticated → named inheritance and wildcard All expansion are consistent with REST/GraphQL.
  • One header read. AuthorizationResolver.CLIENT_ROLE_HEADER appears in exactly one MCP file after this change.

Acceptance

  • grep AuthorizationResolver.CLIENT_ROLE_HEADER src/Azure.DataApiBuilder.Mcp/** returns one match, in McpAuthorizationHelper.
  • No .Split(',') on the role header anywhere in the MCP project.
  • All MCP tools use TryResolveValidatedRole; existing tests still pass.

Non-goals

  • No resolver behavior changes.
  • No config schema changes.
  • No new live-database tests.

Reference

See PR #3737 for the single-role model, the MSRC fix in DescribeEntitiesTool, and the McpAuthorizationHelper.TryResolveAuthorizedRole alignment this issue builds on.

Lingua principale
C#
Stelle
1.5k
Fork
371
Merge medio
9g 2h
PR unite (30g)
10

Preparare l'ambiente

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di Azure/data-api-builder

Tutte le issue di Azure/data-api-builder

Issue simili

Altre issue su C#

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.