MCP Autentifikácia a Autorizácia: OAuth 2.1, Delegovanie Tokenov a Problém Zmäteného Zástupcu

MCP Security OAuth 2.1 Authentication AI Security

Autentifikácia je strážca, ktorý určuje, či sú výkonné schopnosti MCP servera dostupné legitímnym používateľom alebo útočníkom. Ak to urobíte zle, každá iná bezpečnostná kontrola sa stane irelevantnou — neautentifikovaný alebo zle autentifikovaný MCP server s prístupom k e-mailom, súborom a databázam je kritickou zraniteľnosťou bez ohľadu na to, ako dobre ste spevnili všetko ostatné.

Sprievodca OWASP GenAI Security Project identifikuje autentifikáciu a autorizáciu ako jednu z ôsmich základných bezpečnostných domén pre MCP servery, so špecifickými požiadavkami, ktoré presahujú to, čo väčšina vývojárov implementuje predvolene. Tento príspevok vysvetľuje, prečo tieto požiadavky existujú a ako ich správne implementovať.

Výzva Autentifikácie v MCP

MCP servery čelia komplexnejšej autentifikačnej krajine než tradičné služby, pretože sprostredkúvajú medzi viacerými subjektmi:

  • Používateľ, ktorého pokyny riadia AI asistenta
  • AI model, ktorý interpretuje pokyny a volá nástroje
  • MCP klient (aplikácia hostujúca AI)
  • MCP server, ktorý vykonáva volania nástrojov
  • Downstream služby, ktoré MCP server volá v mene používateľa

Každý z týchto vzťahov vyžaduje vlastné autentifikačné a autorizačné kontroly. Slabosť v akomkoľvek článku môže byť zneužitá na obídenie ostatných.

Povinné: OAuth 2.1 a OIDC pre Vzdialené Servery

Pre vzdialené MCP servery — tie, ktoré sú prístupné cez sieť namiesto lokálneho STDIO alebo Unix socketov — je sprievodca OWASP GenAI jednoznačný: OAuth 2.1 s OIDC je povinný, nie voliteľný.

Táto požiadavka existuje, pretože:

OAuth 2.1 poskytuje explicitnú kontrolu rozsahu. Každý prístupový token deklaruje presne, ktoré zdroje a akcie autorizuje. MCP server môže overiť v čase vyvolania nástroja, že prezentovaný token má špecifický rozsah potrebný pre túto akciu — nielen to, že používateľ je autentifikovaný, ale že je autorizovaný pre túto konkrétnu operáciu.

OIDC poskytuje kryptografickú identitu. OpenID Connect pridáva tvrdenia identity (ID token), ktoré MCP server môže overiť bez spätného volania k poskytovateľovi identity. Server overuje iss (vydavateľ), aud (cieľová skupina), exp (platnosť) a podpis pri každej požiadavke.

OAuth 2.1 tokeny sú krátkodobé podľa dizajnu. Moderná špecifikácia OAuth (ktorá konsoliduje a nahrádza najlepšie postupy OAuth 2.0) zdôrazňuje krátkodobé prístupové tokeny, ktoré musia byť pravidelne obnovované. To obmedzuje okno škody, ak je token kompromitovaný.

Čo Overiť pri Každej Požiadavke

Neoverujte tokeny iba pri vytvorení relácie. Overujte pri každom vyvolaní nástroja:

def validate_token(token: str, required_scope: str) -> TokenClaims:
    claims = jwt.decode(
        token,
        key=get_public_key(claims_preview['kid']),
        algorithms=["RS256", "ES256"]
    )

    assert claims['iss'] == EXPECTED_ISSUER
    assert EXPECTED_AUDIENCE in claims['aud']
    assert claims['exp'] > time.time()
    assert required_scope in claims['scope'].split()

    return claims

Nikdy neukladajte výsledky overenia naprieč požiadavkami. Token, ktorý bol platný na začiatku relácie, môže byť odvolaný uprostred relácie.

Dynamické Klientske Prostredia

V prostrediach, kde sa MCP klienti často menia (napr. rôzni AI asistenti sa pripájajú k tomu istému serveru), sú statické API kľúče alebo vopred zdieľané tajomstvá nedostatočné. Použite dynamickú registráciu klienta s OAuth 2.1 alebo OIDC na overenie identity klienta v čase pripojenia. Zoznamy povolených, pevne zakódované politiky pripojenia alebo vzájomné TLS (mTLS) sú vhodné pre známe statické vzťahy medzi konkrétnymi klientmi a servermi.

Logo

Pripravení rozšíriť svoje podnikanie?

Začnite svoju 30-dňovú skúšobnú verziu ešte dnes a vidzte výsledky behom pár dní.

Problém Zmäteného Zástupcu

Pochopenie Útoku

Zmätený Zástupca je klasická autorizačná zraniteľnosť s obzvlášť nebezpečnou manifestáciou v MCP architektúrach. Útok využíva nejednoznačnosť toho, čiu autoritu MCP server vykonáva.

Zvážte tento scenár:

  • Používateľka Alice je autentifikovaná na MCP server s obmedzenými povoleniami — môže čítať svoje vlastné súbory, ale nie iných
  • MCP server má široké povolenia servisného účtu na čítanie všetkých súborov v organizácii
  • MCP server používa token passthrough: preposiela token Alice na downstream služby

Keď Alice požiada AI asistenta o “zhrnutie môjho projektového priečinka,” server použije token Alice na prístup k jej súborom — správne správanie. Ale ak útočník oklame server, aby vykonal požiadavku pomocou vlastných servisných poverení (možno prostredníctvom útoku otrávenia nástroja alebo nepriameho prompt injection), sú použité zvýšené povolenia servera na prístup k súborom, ktoré Alice nie je oprávnená vidieť.

Server je “zmäteným zástupcom” — bol oklamaný, aby použil svoju autoritu v mene niekoho, kto túto autoritu nemá, pôsobiac ako proxy pre eskaláciu privilégií.

Prečo Token Passthrough Vytvára Túto Zraniteľnosť

Mnoho MCP implementácií preposiela token klienta na downstream API pre jednoduchosť. Toto sa zdá intuitívne — token používateľa predstavuje povolenia používateľa, takže jeho použitie pre všetky downstream volania udržiava správnu kontrolu prístupu.

Problém: downstream API, ktoré rozpoznávajú MCP server ako dôveryhodného sprostredkovateľa, môžu udeliť požiadavky pomocou úrovne identity servera, nie úrovne preposlaného tokenu používateľa. A ak MCP server niekedy koná na vlastnú iniciatívu — prostredníctvom rozhodovania AI, ktoré používateľ explicitne nepožadoval — môže použiť vlastné poverenia namiesto tokenu používateľa.

Preposielanie tokenov používateľov tiež:

  • Narúša auditné záznamy (downstream logy zobrazujú identitu používateľa, nie identitu servera, čo zakrýva MCP vrstvu)
  • Dáva útočníkovi, ktorý kompromituje MCP server, prístup k všetkým preposlaným tokenov používateľov
  • Vytvára problémy s dodržiavaním predpisov, ak môžu byť tokeny pre rôznych používateľov zmätené alebo prehrané

Riešenie: Explicitné Delegovanie Tokenov s On-Behalf-Of Tokmi

Namiesto preposielania tokenov klienta by mal MCP server získať vlastné tokeny pre prístup k downstream službám pomocou OAuth On-Behalf-Of (OBO) toku:

Používateľ sa autentifikuje na MCP klienta → klient získa prístupový token používateľa
MCP klient prezentuje token používateľa MCP serveru
MCP server vymení token používateľa za serverový token prostredníctvom OBO toku:
  POST /token
  grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
  assertion=<user_access_token>
  scope=<minimum_required_scope>
MCP server používa vlastný OBO token pre downstream volania

OBO token:

  • Je explicitne vymedzený na minimálne povolenia potrebné pre konkrétne volanie nástroja
  • Identifikuje MCP server ako volajúcu stranu (s používateľom ako subjektom)
  • Je viazaný na autentifikačnú udalosť používateľa (môže byť odvolaný, keď relácia používateľa skončí)
  • Nevystavuje plný token používateľa downstream službám

Krátkodobé, Vymedzené Tokeny

Sprievodca OWASP GenAI dáva konkrétne odporúčanie: vydávajte prístupové tokeny s dobou platnosti meranou v minútach, nie v hodinách. To platí pre tokeny, ktoré MCP server prijíma od klientov, aj pre tokeny, ktoré získava pre prístup k downstream službám.

Prečo Záleží na Krátkej Dobe Platnosti

Odcudzený prístupový token je platný po celú svoju dobu platnosti bez ohľadu na to, či sa legitímny používateľ odhlásil, zmenil heslo alebo odvolal svoju reláciu. 24-hodinový token odcudzený na začiatku relácie dáva útočníkovi 24 hodín trvalého prístupu. 5-minútový token odcudzený uprostred relácie dáva maximálne 5 minút.

Krátkodobé tokeny tiež vynucujú pravidelné autentifikačné udalosti, ktoré poskytujú príležitosti na:

  • Opätovné overenie, či bol účet používateľa pozastavený alebo sa zmenili jeho povolenia
  • Detekciu anomálnych autentifikačných vzorov (nezvyčajné časy, miesta alebo frekvencia)
  • Aplikovanie postupnej autentifikácie pre citlivé operácie

Minimalizácia Rozsahu Tokenu

Každý token by mal niesť iba rozsahy potrebné pre konkrétnu vykonávanú operáciu. Nevydávajte token s rozsahom read:files write:files delete:files, keď aktuálne volanie nástroja potrebuje iba read:files. To obmedzuje škodu, ak je token zachytený alebo model je manipulovaný do neočakávaných volaní nástrojov.

def get_tool_token(user_id: str, tool_name: str) -> str:
    # Mapovať nástroj na minimálne požadované rozsahy
    required_scopes = TOOL_SCOPE_MAP[tool_name]

    return oauth_client.get_token(
        subject=user_id,
        scopes=required_scopes,
        lifetime_seconds=300  # 5 minútová doba platnosti
    )

Zaobchádzanie s Reláciami ako so Stavom, Nie Identitou

Bežná chyba je používanie ID relácií ako autorizačných proxy: ak požiadavka nesie platné ID relácie, server predpokladá, že je autorizovaná. To zamieňa správu stavu s overením identity.

Správny model: ID relácií spravujú konverzačný stav. Autorizácia je overovaná nezávisle pri každej požiadavke overením nárokov OAuth tokenu. Aj požiadavka nesúca platné ID relácie musí predložiť platný, neexpirovaný, správne vymedzený OAuth token pred tým, než je povolené akékoľvek vyvolanie nástroja.

To záleží, pretože ID relácií môžu byť odcudzené, uhádnuté alebo prehrané spôsobmi, ktorými OAuth tokeny — ktoré nesú kryptografické záruky integrity — nemôžu.

Centralizované Vynucovanie Politík

Namiesto implementácie autorizačných kontrol roztrúsených po celých jednotlivých obslužných rutinách nástrojov, sprievodca OWASP GenAI odporúča centralizovanú politickú bránu, ktorá:

  • Zachytáva všetky požiadavky na vyvolanie nástroja pred tým, než sa dostanú ku kódu špecifickému pre nástroj
  • Overuje autentifikáciu (podpis tokenu, vydavateľ, cieľová skupina, platnosť)
  • Vynucuje autorizáciu (požadovaný rozsah pre tento konkrétny nástroj)
  • Aplikuje overenie súhlasu (explicitne autorizoval používateľ tento typ akcie?)
  • Implementuje filtrovanie nástrojov (je tento nástroj povolený v tomto kontexte nasadenia?)
  • Zaznamenáva všetky rozhodnutia s plným kontextom pre audit

Centralizácia zabezpečuje, že politiky sú konzistentne aplikované naprieč všetkými nástrojmi a agentmi. Autorizačná kontrola špecifická pre nástroj môže byť zabudnutá alebo obídená počas vývoja; kontrola brány nemôže.

Zhrnutie: Kontrolný Zoznam Autentifikácie

Pre vzdialené MCP servery je minimálna bezpečnostná laťka autentifikácie:

  • OAuth 2.1 / OIDC vynucované pre všetky pripojenia
  • Podpis tokenu, vydavateľ, cieľová skupina a platnosť overené pri každom vyvolaní nástroja
  • Žiadny token passthrough na downstream API — použite OBO alebo serverom vydané tokeny
  • Prístupové tokeny vymedzené na minimálne požadované povolenia na nástroj
  • Doba platnosti tokenov meraná v minútach s povinným obnovením
  • ID relácií nie sú používané ako autorizačné proxy
  • Centralizovaná brána na vynucovanie politík je na mieste
  • Všetky autentifikačné udalosti a autorizačné rozhodnutia sú nezmutovateľne zaznamenané

Súvisiace Zdroje

Najčastejšie kladené otázky

Prečo MCP vyžaduje OAuth 2.1 namiesto jednoduchších autentifikačných metód?

OAuth 2.1 je vyžadovaný pre vzdialené MCP servery, pretože poskytuje delegovanú autorizáciu s explicitnou kontrolou rozsahu, krátkodobé tokeny, kryptografické overenie a štandardizované tvrdenia identity (prostredníctvom OIDC). Jednoduchšie metódy ako API kľúče alebo session cookies nemajú granularitu rozsahu potrebnú na implementáciu prístupu s najmenšími privilégiami, neposkytujú kryptografické záruky identity a je ťažké ich granulárne odvolať po skončení relácie.

Čo je problém Zmäteného Zástupcu v MCP?

Zmätený Zástupca je útok eskalácie privilégií, pri ktorom je MCP server oklamaný, aby použil svoje vlastné (vyššie) privilégiá na vykonanie akcií, ktoré požadujúci používateľ nie je oprávnený vykonať. Dochádza k tomu, keď sa používa token passthrough — server preposiela token používateľa na downstream API, ktoré môžu poskytnúť používateľovi prístup, ktorý by nemal mať na základe dôveryhodného statusu servera. Riešením je použitie On-Behalf-Of tokenových tokov, kde sú tokeny explicitne vydané pre špecifický rozsah prístupu MCP servera.

Čo je token passthrough a prečo je nebezpečný v MCP?

Token passthrough znamená, že MCP server preposiela autentifikačný token klienta priamo na downstream API, namiesto použitia vlastných serverom vydaných poverení. Je to nebezpečné, pretože: (1) narúša auditné záznamy — downstream systémy vidia token používateľa, nie MCP server, čo znemožňuje pripísať akcie serveru; (2) obchádza vlastné prístupové politiky MCP servera; (3) vytvára zraniteľnosť Zmäteného Zástupcu, ak downstream API dôveruje identite MCP servera viac ako identite používateľa; a (4) ak je MCP server kompromitovaný, útočník získa prístup k preposielaným tokenov používateľov pre všetky pripojené downstream služby.

Aké krátke by mali byť MCP prístupové tokeny?

Sprievodca OWASP GenAI odporúča tokeny s dobou platnosti meranou v minútach, nie v hodinách alebo dňoch. Kratšia doba platnosti tokenov obmedzuje okno exploitácie, ak je token odcudzený alebo je relácia unášaná. Každé vyvolanie nástroja by malo znovu overiť podpis, cieľovú skupinu a platnosť tokenu — nespoliehať sa na uložené overenie od začiatku relácie.

Arshia je inžinierka AI workflowov v spoločnosti FlowHunt. S pozadím v informatike a vášňou pre umelú inteligenciu sa špecializuje na tvorbu efektívnych workflowov, ktoré integrujú AI nástroje do každodenných úloh, čím zvyšuje produktivitu a kreativitu.

Arshia Kahani
Arshia Kahani
Inžinierka AI workflowov

Je Vaša MCP Autentifikačná Architektúra Bezpečná?

Náš bezpečnostný tím hodnotí MCP autentifikačné konfigurácie, spracovanie tokenov a autorizačné toky podľa štandardov OWASP GenAI. Identifikujte medzery skôr, než to urobia útočníci.

Zistiť viac

Attestovateľný MCP Server
Attestovateľný MCP Server

Attestovateľný MCP Server

Attestovateľný MCP Server prináša vzdialenú atestáciu a dôverné výpočty do workflowov FlowHunt, čo umožňuje AI agentom a klientom overiť integritu servera pred ...

4 min čítania
Security AI Infrastructure +4
Authenticator App MCP Server
Authenticator App MCP Server

Authenticator App MCP Server

Server Authenticator App MCP umožňuje AI agentom bezpečne pristupovať k 2FA kódom a heslám, čím zjednodušuje automatizované prihlasovanie a správu poverení napr...

4 min čítania
MCP Security +5