MCP-autentikointi ja -auktorisointi: OAuth 2.1, tokenin delegointi ja Confused Deputy -ongelma

MCP Security OAuth 2.1 Authentication AI Security

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ä.

Logo

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
    )

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:

  • OAuth 2.1 / OIDC pakotettu kaikille yhteyksille
  • Tokenin allekirjoitus, myöntäjä, yleisö ja vanhentuminen validoitu jokaisessa työkalun kutsussa
  • Ei tokenin läpivirtausta alempiin API:hin — käytä OBO:ta tai palvelimen myöntämiä tokeneita
  • Käyttöoikeustokenit rajattu vähimmäisvaadittuihin oikeuksiin työkalua kohden
  • Tokenin eliniät mitattu minuuteissa pakollisella päivityksellä
  • Istunto-ID:itä ei käytetä auktorisointiproksyina
  • Keskitetty periaatteiden täytäntöönpanoportti käytössä
  • Kaikki autentikointitapahtumat ja auktorisointipäätökset kirjattu muuttumattomasti

Aiheeseen liittyvät resurssit

Usein kysytyt kysymykset

Miksi MCP vaatii OAuth 2.1:n yksinkertaisempien autentikointimenetelmien sijaan?

OAuth 2.1 vaaditaan etä-MCP-palvelimille, koska se tarjoaa delegoidun auktorisoinnin eksplisiittisellä laajuuskontrollilla, lyhytikäisillä tokeneilla, kryptografisella todennuksella ja standardoiduilla identiteettivakuutuksilla (OIDC:n kautta). Yksinkertaisemmilta menetelmiltä, kuten API-avaimista tai istuntoevästeet, puuttuu laajuuden tarkkuus, jota tarvitaan vähiten oikeuksia -periaatteen toteuttamiseen, ne eivät tarjoa kryptografisia identiteettitakuita, ja niiden yksityiskohtainen peruuttaminen istunnon päättyessä on vaikeaa.

Mikä on Confused Deputy -ongelma MCP:ssä?

Confused Deputy on oikeuksien eskalaatiohyökkäys, jossa MCP-palvelin huijataan käyttämään omia (korkeampia) oikeuksiaan suorittamaan toimintoja, joihin pyynnön tekevällä käyttäjällä ei ole valtuutusta. Se tapahtuu, kun käytetään tokenin läpivirtausta — palvelin välittää käyttäjän tokenin alempiin API:hin, jotka voivat myöntää käyttäjälle pääsyn, jota hänellä ei pitäisi olla palvelimen luotetun aseman perusteella. Korjaus on käyttää On-Behalf-Of-tokenvirtauksia, joissa tokenit myönnetään eksplisiittisesti MCP-palvelimen tietylle käyttöoikeuslaajuudelle.

Mikä on tokenin läpivirtaus ja miksi se on vaarallista MCP:ssä?

Tokenin läpivirtaus tarkoittaa, että MCP-palvelin välittää asiakkaan autentikointitokenin suoraan alempiin API:hin sen sijaan, että käyttäisi omia palvelimen myöntämiä valtuustietoja. Tämä on vaarallista, koska: (1) se rikkoo auditointiketjut — alemmat järjestelmät näkevät käyttäjätokenin, eivät MCP-palvelinta, mikä tekee mahdottomaksi yhdistää toimintoja palvelimeen; (2) se ohittaa MCP-palvelimen omat käyttöoikeuspolitiikat; (3) se luo Confused Deputy -haavoittuvuuden, jos alempi API luottaa MCP-palvelimen identiteettiin enemmän kuin käyttäjän identiteettiin; ja (4) jos MCP-palvelin vaarantuu, hyökkääjä saa pääsyn välitettyihin käyttäjätokeneihin kaikissa yhdistetyissä alemman tason palveluissa.

Kuinka lyhyitä MCP-käyttötokenien tulisi olla?

OWASP GenAI -opas suosittelee tokeneita, joiden elinaika mitataan minuuteissa, ei tunneissa tai päivissä. Lyhyempi tokenin elinaika rajoittaa hyödyntämisikkunaa, jos token varastetaan tai istunto kaapataan. Jokaisen työkalun kutsun tulisi uudelleenvalidoida tokenin allekirjoitus, yleisö ja vanhentuminen — ei luottaa välimuistissa olevaan validointiin istunnon alusta.

Arshia on AI-työnkulkuinsinööri FlowHuntilla. Tietojenkäsittelytieteen taustalla ja intohimolla tekoälyyn hän erikoistuu luomaan tehokkaita työnkulkuja, jotka integroivat tekoälytyökaluja arjen tehtäviin, parantaen tuottavuutta ja luovuutta.

Arshia Kahani
Arshia Kahani
AI-työnkulkuinsinööri

Onko MCP-autentikointiarkkitehtuurisi turvallinen?

Tietoturvatiimimme arvioi MCP-autentikointikonfiguraatiot, tokenien käsittelyn ja auktorisointivirtaukset OWASP GenAI -standardien mukaisesti. Tunnista puutteet ennen kuin hyökkääjät tekevät sen.

Lue lisää

Authenticator App MCP -palvelin
Authenticator App MCP -palvelin

Authenticator App MCP -palvelin

Authenticator App MCP -palvelin mahdollistaa AI-agenttien turvallisen pääsyn 2FA-koodeihin ja salasanoihin, tehostaen automaattisia kirjautumisprosesseja ja tun...

4 min lukuaika
MCP Security +5