Autentikointi on porttivahti, joka määrittää, ovatko MCP-palvelimen tehokkaat ominaisuudet saatavilla laillisille käyttäjille vai hyökkääjille. Jos teet sen väärin, kaikki muut tietoturvakontrollit muuttuvat merkityksettömiksi — autentikoimaton tai huonosti autentikoitu MCP-palvelin, jolla on pääsy sähköpostiin, tiedostoihin ja tietokantoihin, on kriittinen haavoittuvuus riippumatta siitä, kuinka hyvin olet koventanut kaiken muun.
OWASP GenAI Security Projectin opas tunnistaa autentikoinnin ja auktorisoinnin yhdeksi kahdeksasta MCP-palvelimien tietoturvan ydindomainista, joilla on erityisvaatimuksia, jotka ylittävät sen, mitä useimmat kehittäjät toteuttavat oletuksena. Tämä kirjoitus selittää, miksi nämä vaatimukset ovat olemassa ja miten ne toteutetaan oikein.
Autentikointihaaste MCP:ssä
MCP-palvelimet kohtaavat monimutkaisemman autentikointimaiseman kuin perinteiset palvelut, koska ne välittävät useiden päämiesten välillä:
- Käyttäjä, jonka ohjeet ohjaavat AI-avustajaa
- AI-malli, joka tulkitsee ohjeita ja kutsuu työkaluja
- MCP-asiakas (AI:ta isännöivä sovellus)
- MCP-palvelin, joka suorittaa työkalukutsut
- Alemmat palvelut, joita MCP-palvelin kutsuu käyttäjän puolesta
Jokainen näistä suhteista vaatii omat autentikointi- ja auktorisointikontrollinsa. Minkä tahansa linkin heikkous voidaan hyödyntää muiden ohittamiseen.
Pakollinen: OAuth 2.1 ja OIDC etäpalvelimille
Etä-MCP-palvelimille — niihin, joihin pääsee verkon kautta paikallisen STDIO:n tai Unix-socketien sijaan — OWASP GenAI -opas on yksiselitteinen: OAuth 2.1 ja OIDC ovat pakollisia, eivät valinnaisia.
Tämä vaatimus on olemassa, koska:
OAuth 2.1 tarjoaa eksplisiittisen laajuuskontrolin. Jokainen käyttöoikeustoken ilmoittaa täsmälleen, mitkä resurssit ja toiminnot se valtuuttaa. MCP-palvelin voi varmistaa työkalun kutsuntahetkellä, että esitetyllä tokenilla on tietty laajuus, jota tarvitaan kyseiseen toimintoon — ei vain, että käyttäjä on autentikoitu, vaan että hänellä on valtuutus tähän tiettyyn operaatioon.
OIDC tarjoaa kryptografisen identiteetin. OpenID Connect lisää identiteettivakuutukset (ID-token), jotka MCP-palvelin voi varmistaa ilman edestakaista yhteyttä identiteettitarjoajaan. Palvelin validoi iss (myöntäjä), aud (yleisö), exp (vanhentuminen) ja allekirjoituksen jokaisessa pyynnössä.
OAuth 2.1 -tokenit ovat lyhytikäisiä suunnittelun mukaan. Moderni OAuth-spesifikaatio (joka yhdistää ja korvaa OAuth 2.0:n parhaat käytännöt) korostaa lyhytikäisiä käyttöoikeustokeneita, jotka on päivitettävä säännöllisesti. Tämä rajoittaa vahingon ikkunaa, jos token vaarantuu.
Mitä validoida jokaisessa pyynnössä
Älä validoi tokeneita vain istunnon muodostamisessa. Validoi jokaisessa työkalun kutsussa:
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
Älä koskaan välimuistissa validointituloksia pyyntöjen välillä. Token, joka oli voimassa istunnon alussa, voidaan peruuttaa kesken istunnon.
Dynaamiset asiakasympäristöt
Ympäristöissä, joissa MCP-asiakkaat vaihtuvat usein (esim. eri AI-avustajat yhdistävät samaan palvelimeen), staattiset API-avaimet tai ennalta jaetut salaisuudet eivät riitä. Käytä dynaamista asiakasrekisteröintiä OAuth 2.1:n tai OIDC:n kanssa asiakasidentiteetin vahvistamiseksi yhdistämishetkellä. Sallittujen luettelot, kovakoodatut yhteysperiaatteet tai keskinäinen TLS (mTLS) sopivat tunnetuille staattisille suhteille tiettyjen asiakkaiden ja palvelimien välillä.
Valmis kasvattamaan liiketoimintaasi?
Aloita ilmainen kokeilujakso tänään ja näe tulokset muutamassa päivässä.
Confused Deputy -ongelma
Hyökkäyksen ymmärtäminen
Confused Deputy on klassinen auktorisointihaavoittuvuus, jolla on erityisen vaarallinen ilmentymä MCP-arkkitehtuureissa. Hyökkäys hyödyntää epäselvyyttä siitä, kenen valtuudella MCP-palvelin toimii.
Harkitse tätä skenaariota:
- Käyttäjä Alice on autentikoitu MCP-palvelimeen rajoitetuilla oikeuksilla — hän voi lukea omia tiedostojaan, mutta ei muiden
- MCP-palvelimella on laajat palvelutilin oikeudet lukea kaikki organisaation tiedostot
- MCP-palvelin käyttää tokenin läpivirtausta: se välittää Alicen tokenin alempiin palveluihin
Kun Alice pyytää AI-avustajaa “tiivistämään projektikansioni”, palvelin käyttää Alicen tokenia päästäkseen hänen tiedostoihinsa — oikea käyttäytyminen. Mutta jos hyökkääjä huijaa palvelimen tekemään pyynnön käyttämällä omia palveluvaltuustietojaan (ehkä työkalun myrkyttämishyökkäyksen tai epäsuoran prompt-injektion kautta), palvelimen korotettuja oikeuksia käytetään tiedostojen käyttämiseen, joita Alice ei ole valtuutettu näkemään.
Palvelin on “hämmentynyt apulainen” — se on huijattu käyttämään valtuuttaan jonkun puolesta, jolla ei ole kyseistä valtuutta, toimien oikeuksien eskalaation välittäjänä.
Miksi tokenin läpivirtaus luo tämän haavoittuvuuden
Monet MCP-toteutukset välittävät asiakkaan tokenin alempiin API:hin yksinkertaisuuden vuoksi. Tämä vaikuttaa intuitiiviselta — käyttäjän token edustaa käyttäjän oikeuksia, joten sen käyttäminen kaikissa alemmissa kutsuissa ylläpitää oikean pääsynhallinnan.
Ongelma: alemmat API:t, jotka tunnistavat MCP-palvelimen luotettuna välittäjänä, voivat myöntää pyyntöjä käyttäen palvelimen identiteettitasoa, eivät välitetyn käyttäjätokenin tasoa. Ja jos MCP-palvelin koskaan toimii omasta aloitteestaan — AI-päätöksenteon kautta, jota käyttäjä ei nimenomaisesti pyytänyt — se saattaa käyttää omia valtuustietojaan käyttäjän tokenin sijaan.
Käyttäjätokenien välittäminen myös:
- Rikkoo auditointiketjut (alemmat lokit näyttävät käyttäjäidentiteetin, eivät palvelinidentiteettiä, hämärtäen MCP-kerroksen)
- Antaa MCP-palvelimen vaarantavalle hyökkääjälle pääsyn kaikkiin välitettyihin käyttäjätokeneihin
- Luo vaatimustenmukaisuusongelmia, jos eri käyttäjien tokenit voidaan sekoittaa tai toistaa
Korjaus: Eksplisiittinen tokenin delegointi On-Behalf-Of-virtauksilla
Sen sijaan, että välittäisit asiakastokeneita, MCP-palvelimen tulisi hankkia omat tokenit alemman palvelun käyttöä varten käyttämällä OAuthin On-Behalf-Of (OBO) -virtausta:
Käyttäjä autentikoi MCP-asiakkaaseen → asiakas saa käyttäjän käyttöoikeustokenin
MCP-asiakas esittää käyttäjätokenin MCP-palvelimelle
MCP-palvelin vaihtaa käyttäjätokenin palvelintokeniksi OBO-virtauksen kautta:
POST /token
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
assertion=<user_access_token>
scope=<minimum_required_scope>
MCP-palvelin käyttää omaa OBO-tokeniaan alempiin kutsuihin
OBO-token:
- On eksplisiittisesti rajattu vähimmäisoikeuksiin, joita tarvitaan tiettyyn työkalukutsuun
- Tunnistaa MCP-palvelimen kutsuvana osapuolena (käyttäjän ollessa subjekti)
- On sidottu käyttäjän autentikointitapahtumaan (voidaan peruuttaa, kun käyttäjän istunto päättyy)
- Ei paljasta käyttäjän koko tokenia alemmille palveluille
Lyhytikäiset, rajatut tokenit
OWASP GenAI -opas antaa tietyn suosituksen: myönnä käyttöoikeustokenit, joiden elinaika mitataan minuuteissa, ei tunneissa. Tämä koskee sekä tokeneita, joita MCP-palvelin hyväksyy asiakkailta, että tokeneita, joita se hankkii alemman palvelun käyttöä varten.
Miksi lyhyet eliniät ovat tärkeitä
Varastettu käyttöoikeustoken on voimassa koko eliniän ajan riippumatta siitä, onko laillinen käyttäjä kirjautunut ulos, vaihtanut salasanansa tai peruuttanut istuntonsa. 24 tunnin token, joka varastetaan istunnon alussa, antaa hyökkääjälle 24 tuntia pysyvää pääsyä. 5 minuutin token, joka varastetaan kesken istunnon, antaa enintään 5 minuuttia.
Lyhytikäiset tokenit pakottavat myös säännöllisiin uudelleenautentikointitapahtumiin, jotka tarjoavat mahdollisuuksia:
- Tarkistaa uudelleen, onko käyttäjän tili keskeytetty tai heidän oikeuksiaan muutettu
- Havaita poikkeavia autentikointimalleja (epätavallisia aikoja, sijainteja tai taajuutta)
- Soveltaa porrasteista autentikointia arkaluonteisiin operaatioihin
Tokenin laajuuden minimointi
Jokaisen tokenin tulisi sisältää vain suoritettavaan tiettyyn operaatioon tarvittavat laajuudet. Älä myönnä tokenia read:files write:files delete:files -laajuudella, kun nykyinen työkalukutsu tarvitsee vain read:files. Tämä rajoittaa vahinkoa, jos token kaapataan tai mallia manipuloidaan odottamattomiin työkalukutsuihin.
def get_tool_token(user_id: str, tool_name: str) -> str:
# Kartoita työkalu vähimmäisvaadittuihin laajuuksiin
required_scopes = TOOL_SCOPE_MAP[tool_name]
return oauth_client.get_token(
subject=user_id,
scopes=required_scopes,
lifetime_seconds=300 # 5 minuutin elinaika
)
Liity uutiskirjeellemme
Saa uusimmat vinkit, trendit ja tarjoukset ilmaiseksi.
Istuntojen käsitteleminen tilana, ei identiteettinä
Yleinen virhe on käyttää istunto-ID:itä auktorisointiproksyina: jos pyynnössä on voimassa oleva istunto-ID, palvelin olettaa sen olevan valtuutettu. Tämä sekoittaa tilanhallinnan identiteetin todentamiseen.
Oikea malli: istunto-ID:t hallitsevat keskustelutilaa. Auktorisointi varmistetaan itsenäisesti jokaisessa pyynnössä validoimalla OAuth-tokenin väitteet. Jopa voimassa olevan istunto-ID:n sisältävän pyynnön on esitettävä voimassa oleva, vanhentumaton, asianmukaisesti rajattu OAuth-token ennen kuin mikään työkalun kutsu sallitaan.
Tämä on tärkeää, koska istunto-ID:t voidaan varastaa, arvata tai toistaa tavoilla, joilla OAuth-tokeneita — jotka sisältävät kryptografisia eheyden takuita — ei voida.
Keskitetty periaatteiden täytäntöönpano
Sen sijaan, että auktorisointitarkistukset toteutettaisiin hajallaan yksittäisissä työkalukäsittelijöissä, OWASP GenAI -opas suosittelee keskitettyä periaateporttia, joka:
- Sieppaa kaikki työkalun kutsuntapyynnöt ennen kuin ne saavuttavat työkalukohtaisen koodin
- Validoi autentikoinnin (tokenin allekirjoitus, myöntäjä, yleisö, vanhentuminen)
- Pakottaa auktorisoinnin (vaadittu laajuus tälle tietylle työkalulle)
- Soveltaa suostumuksen todentamista (onko käyttäjä nimenomaisesti valtuuttanut tämäntyyppisen toiminnon?)
- Toteuttaa työkalujen suodatuksen (onko tämä työkalu sallittu tässä käyttöönottokontekstissa?)
- Kirjaa kaikki päätökset täydellä kontekstilla auditointia varten
Keskittäminen varmistaa, että periaatteet sovelletaan johdonmukaisesti kaikkiin työkaluihin ja agentteihin. Työkalukohtainen auktorisointitarkistus voidaan unohtaa tai ohittaa kehityksen aikana; porttitarkistusta ei voida.
Yhteenveto: Autentikointitarkistuslista
Etä-MCP-palvelimille vähimmäisautentikointitietoturvarima on: