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.
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
)
Prihláste sa na newsletter
Získajte najnovšie tipy, trendy a ponuky zadarmo.
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:
Súvisiace Zdroje