MCP-autentisering og autorisasjon: OAuth 2.1, token-delegering og Confused Deputy-problemet

MCP Security OAuth 2.1 Authentication AI Security

Autentisering er portvakten som avgjør om en MCP-servers kraftige kapasiteter er tilgjengelige for legitime brukere eller for angripere. Gjør det feil, og alle andre sikkerhetskontroller blir irrelevante — en uautentisert eller dårlig autentisert MCP-server med tilgang til e-post, filer og databaser er en kritisk sårbarhet uavhengig av hvor godt du har sikret alt annet.

OWASP GenAI Security Project-guiden identifiserer autentisering og autorisasjon som ett av de åtte kjernesikkerhetsområdene for MCP-servere, med spesifikke krav som går utover det de fleste utviklere implementerer som standard. Dette innlegget forklarer hvorfor disse kravene eksisterer og hvordan man implementerer dem riktig.

Autentiseringsutfordringen i MCP

MCP-servere står overfor et mer komplekst autentiseringslandskap enn tradisjonelle tjenester fordi de formidler mellom flere prinsipper:

  • Brukeren hvis instruksjoner driver AI-assistenten
  • AI-modellen som tolker instruksjoner og kaller verktøy
  • MCP-klienten (applikasjonen som hoster AI-en)
  • MCP-serveren som utfører verktøykall
  • Nedstrømstjenester som MCP-serveren kaller på brukerens vegne

Hvert av disse forholdene krever sine egne autentiserings- og autorisasjonskontroller. En svakhet i noen lenke kan utnyttes til å omgå de andre.

Obligatorisk: OAuth 2.1 og OIDC for eksterne servere

For eksterne MCP-servere — de som er tilgjengelige over et nettverk i stedet for gjennom lokale STDIO- eller Unix-sokler — er OWASP GenAI-guiden utvetydig: OAuth 2.1 med OIDC er obligatorisk, ikke valgfritt.

Dette kravet eksisterer fordi:

OAuth 2.1 gir eksplisitt scope-kontroll. Hvert tilgangstoken deklarerer nøyaktig hvilke ressurser og handlinger det autoriserer. En MCP-server kan verifisere ved verktøykall-tidspunktet at tokenet som presenteres har det spesifikke scopet som trengs for den handlingen — ikke bare at brukeren er autentisert, men at de er autorisert for denne spesifikke operasjonen.

OIDC gir kryptografisk identitet. OpenID Connect legger til identitetsbekreftelser (ID-tokenet) som MCP-serveren kan verifisere uten rundtur til identitetsleverandøren. Serveren validerer iss (utsteder), aud (målgruppe), exp (utløp) og signatur på hver forespørsel.

OAuth 2.1-tokens er kortlivede ved design. Den moderne OAuth-spesifikasjonen (som konsoliderer og erstatter OAuth 2.0 beste praksis) vektlegger kortlivede tilgangstokens som må fornyes regelmessig. Dette begrenser skadevinduet hvis et token blir kompromittert.

Hva som skal valideres ved hver forespørsel

Ikke valider tokens bare ved sesjonsopprettelse. Valider ved hvert verktøykall:

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

Aldri bufre valideringsresultater på tvers av forespørsler. Et token som var gyldig ved sesjonsstart kan være tilbakekalt midt i sesjonen.

Dynamiske klientmiljøer

I miljøer der MCP-klienter endres ofte (f.eks. forskjellige AI-assistenter som kobler til samme server), er statiske API-nøkler eller forhåndsdelte hemmeligheter utilstrekkelige. Bruk dynamisk klientregistrering med OAuth 2.1 eller OIDC for å verifisere klientidentitet ved tilkoblingstidspunktet. Hvitelister, hardkodede tilkoblingspolicyer eller gjensidig TLS (mTLS) er passende for kjente statiske forhold mellom spesifikke klienter og servere.

Logo

Klar til å vokse bedriften din?

Start din gratis prøveperiode i dag og se resultater i løpet av få dager.

Confused Deputy-problemet

Forstå angrepet

Confused Deputy er en klassisk autorisasjonssårbarhet med en spesielt farlig manifestasjon i MCP-arkitekturer. Angrepet utnytter tvetydigheten av hvis autoritet en MCP-server handler med.

Vurder dette scenariet:

  • Bruker Alice er autentisert til en MCP-server med begrensede tillatelser — hun kan lese sine egne filer, men ikke andres
  • MCP-serveren har brede tjenestetilgangstillatelser til å lese alle filer i organisasjonen
  • MCP-serveren bruker token-videreføring: den videresender Alices token til nedstrømstjenester

Når Alice ber AI-assistenten om å “oppsummere min prosjektmappe”, bruker serveren Alices token for å få tilgang til filene hennes — korrekt atferd. Men hvis en angriper lurer serveren til å gjøre en forespørsel ved å bruke sine egne tjenestekredisjoner (kanskje gjennom et verktøyforgiftningsangrep eller indirekte prompt-injeksjon), brukes serverens utvidede tillatelser til å få tilgang til filer Alice ikke er autorisert til å se.

Serveren er den “forvirrede fullmektigen” — den har blitt lurt til å bruke sin autoritet på vegne av noen som ikke har den autoriteten, og opptrer som en proxy for privilegieeskalering.

Hvorfor token-videreføring skaper denne sårbarheten

Mange MCP-implementeringer videresender klientens token til nedstrøms-APIer for enkelhets skyld. Dette virker intuitivt — brukerens token representerer brukerens tillatelser, så å bruke det for alle nedstrømskall opprettholder korrekt tilgangskontroll.

Problemet: nedstrøms-APIer som gjenkjenner MCP-serveren som en pålitelig mellommann kan innvilge forespørsler ved å bruke serverens identitetsnivå, ikke det videreførte bruker-tokenets nivå. Og hvis MCP-serveren noen gang handler på eget initiativ — gjennom AI-beslutningstaking som brukeren ikke eksplisitt ba om — kan den bruke sine egne legitimasjoner i stedet for brukerens token.

Videreføring av brukertokens:

  • Bryter revisjonsspor (nedstrømslogger viser brukeridentitet, ikke serveridentitet, og skjuler MCP-laget)
  • Gir en angriper som kompromitterer MCP-serveren tilgang til alle videreførte brukertokens
  • Skaper compliance-problemer hvis tokens for forskjellige brukere kan forveksles eller spilles av på nytt

Løsningen: Eksplisitt token-delegering med On-Behalf-Of-flyter

I stedet for å videresende klienttokens, bør MCP-serveren innhente sine egne tokens for nedstrømstjenestetilgang ved å bruke OAuths On-Behalf-Of (OBO)-flyt:

Bruker autentiserer til MCP-klient → klient får brukertilgangstoken
MCP-klient presenterer brukertoken til MCP-server
MCP-server bytter brukertoken mot et servertoken via OBO-flyt:
  POST /token
  grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
  assertion=<user_access_token>
  scope=<minimum_required_scope>
MCP-server bruker sitt eget OBO-token for nedstrømskall

OBO-tokenet:

  • Er eksplisitt scopet til minimumstillatelsene som trengs for det spesifikke verktøykallet
  • Identifiserer MCP-serveren som den kallende parten (med brukeren som subjekt)
  • Er knyttet til brukerens autentiseringshendelse (kan tilbakekalles når brukerens sesjon avsluttes)
  • Eksponerer ikke brukerens fulle token til nedstrømstjenester

Kortlivede, scopede tokens

OWASP GenAI-guiden gir en spesifikk anbefaling: utsted tilgangstokens med levetider målt i minutter, ikke timer. Dette gjelder både tokens som MCP-serveren aksepterer fra klienter og tokens den innhenter for nedstrømstjenestetilgang.

Hvorfor korte levetider er viktig

Et stjålet tilgangstoken er gyldig i hele sin levetid uavhengig av om den legitime brukeren har logget ut, endret passordet sitt eller tilbakekalt sesjonen sin. Et 24-timers token stjålet i begynnelsen av en sesjon gir en angriper 24 timers vedvarende tilgang. Et 5-minutters token stjålet midt i sesjonen gir maksimalt 5 minutter.

Kortlivede tokens håndhever også regelmessige reautentiseringshendelser, som gir muligheter til å:

  • Sjekke på nytt om brukerens konto har blitt suspendert eller deres tillatelser endret
  • Oppdage anomale autentiseringsmønstre (uvanlige tider, steder eller frekvens)
  • Anvende trinnvis autentisering for sensitive operasjoner

Token scope-minimering

Hvert token bør bare bære scopene som trengs for den spesifikke operasjonen som utføres. Ikke utsted et token med read:files write:files delete:files scope når det gjeldende verktøykallet bare trenger read:files. Dette begrenser skaden hvis tokenet blir avlyttet eller modellen manipuleres til uventede verktøykall.

def get_tool_token(user_id: str, tool_name: str) -> str:
    # Koble verktøy til minimum nødvendige scopes
    required_scopes = TOOL_SCOPE_MAP[tool_name]

    return oauth_client.get_token(
        subject=user_id,
        scopes=required_scopes,
        lifetime_seconds=300  # 5 minutters levetid
    )

Behandle sesjoner som tilstand, ikke identitet

En vanlig feil er å bruke sesjons-IDer som autorisasjonsproxyer: hvis en forespørsel bærer en gyldig sesjons-ID, antar serveren at den er autorisert. Dette sammenblander tilstandsstyring med identitetsverifisering.

Den korrekte modellen: sesjons-IDer håndterer samtaletilstand. Autorisasjon verifiseres uavhengig ved hver forespørsel ved å validere OAuth-tokenets krav. Selv en forespørsel som bærer en gyldig sesjons-ID må presentere et gyldig, ikke-utløpt, riktig scopet OAuth-token før noe verktøykall tillates.

Dette er viktig fordi sesjons-IDer kan bli stjålet, gjettet eller spilt av på nytt på måter som OAuth-tokens — som bærer kryptografiske integritetsgarantier — ikke kan.

Sentralisert policyhåndhevelse

I stedet for å implementere autorisasjonskontroller spredt utover individuelle verktøyhåndterere, anbefaler OWASP GenAI-guiden en sentralisert policygateway som:

  • Avskjærer alle verktøykallforespørsler før de når verktøyspesifikk kode
  • Validerer autentisering (token-signatur, utsteder, målgruppe, utløp)
  • Håndhever autorisasjon (nødvendig scope for dette spesifikke verktøyet)
  • Anvender samtykkeverifisering (har brukeren eksplisitt autorisert denne typen handling?)
  • Implementerer verktøyfiltrering (er dette verktøyet tillatt i denne distribusjonskonteksten?)
  • Logger alle beslutninger med full kontekst for revisjon

Sentralisering sikrer at policyer anvendes konsekvent på tvers av alle verktøy og agenter. En verktøyspesifikk autorisasjonskontroll kan bli glemt eller omgått under utvikling; en gatewaykontroll kan ikke.

Oppsummering: Autentiseringssjekklisten

For eksterne MCP-servere er minimum autentiseringssikkerhetsstandard:

  • OAuth 2.1 / OIDC håndhevet for alle tilkoblinger
  • Token-signatur, utsteder, målgruppe og utløp validert ved hvert verktøykall
  • Ingen token-videreføring til nedstrøms-APIer — bruk OBO eller serverutstedte tokens
  • Tilgangstokens scopet til minimum nødvendige tillatelser per verktøy
  • Token-levetider målt i minutter med obligatorisk fornyelse
  • Sesjons-IDer brukes ikke som autorisasjonsproxyer
  • Sentralisert policyhåndhevelsesgateway på plass
  • Alle autentiseringshendelser og autorisasjonsbeslutninger logget uforanderlig

Relaterte ressurser

Vanlige spørsmål

Hvorfor krever MCP OAuth 2.1 i stedet for enklere autentiseringsmetoder?

OAuth 2.1 er påkrevd for eksterne MCP-servere fordi det gir delegert autorisasjon med eksplisitt scope-kontroll, kortlivede tokens, kryptografisk verifisering og standardiserte identitetsbekreftelser (via OIDC). Enklere metoder som API-nøkler eller sesjonscookies mangler scope-granulariteten som trengs for å implementere tilgang med minste privilegium, gir ikke kryptografiske identitetsgarantier, og er vanskelige å tilbakekalle granulært når en sesjon avsluttes.

Hva er Confused Deputy-problemet i MCP?

Confused Deputy er et privilegieeskaleringsangrep der MCP-serveren lures til å bruke sine egne (høyere) privilegier til å utføre handlinger som den forespørrende brukeren ikke er autorisert til å utføre. Det oppstår når token-videreføring brukes — serveren videresender en brukers token til nedstrøms-APIer, som kan gi brukeren tilgang de ikke burde ha basert på serverens pålitelige status. Løsningen er å bruke On-Behalf-Of token-flyter der tokens eksplisitt utstedes for MCP-serverens spesifikke tilgangsomfang.

Hva er token-videreføring og hvorfor er det farlig i MCP?

Token-videreføring betyr at MCP-serveren videresender klientens autentiseringstoken direkte til nedstrøms-APIer, i stedet for å bruke sine egne serverutstedte legitimasjoner. Dette er farlig fordi: (1) det bryter revisjonsspor — nedstrømssystemer ser bruker-tokenet, ikke MCP-serveren, noe som gjør det umulig å tilskrive handlinger til serveren; (2) det omgår MCP-serverens egne tilgangspolicyer; (3) det skaper en Confused Deputy-sårbarhet hvis nedstrøms-APIet stoler mer på MCP-serverens identitet enn brukerens; og (4) hvis MCP-serveren blir kompromittert, får angriperen tilgang til videreførte brukertokens for alle tilkoblede nedstrømstjenester.

Hvor korte bør MCP-tilgangstokens være?

OWASP GenAI-guiden anbefaler tokens med levetider målt i minutter, ikke timer eller dager. Kortere token-levetider begrenser utnyttelsesvinduet hvis et token blir stjålet eller en sesjon blir kapret. Hver verktøykall bør revalidere tokenets signatur, målgruppe og utløp — ikke stole på bufret validering fra sesjonsstart.

Arshia er en AI Workflow Engineer hos FlowHunt. Med bakgrunn i informatikk og en lidenskap for kunstig intelligens, spesialiserer han seg på å lage effektive arbeidsflyter som integrerer AI-verktøy i daglige oppgaver, og dermed øker produktivitet og kreativitet.

Arshia Kahani
Arshia Kahani
AI Workflow Engineer

Er din MCP-autentiseringsarkitektur sikker?

Vårt sikkerhetsteam vurderer MCP-autentiseringskonfigurasjoner, token-håndtering og autorisasjonsflyter mot OWASP GenAI-standardene. Identifiser hull før angripere gjør det.

Lær mer

Authenticator App MCP-server
Authenticator App MCP-server

Authenticator App MCP-server

Authenticator App MCP-serveren gjør det mulig for AI-agenter å få sikker tilgang til 2FA-koder og passord, og effektiviserer automatiserte innloggingsprosesser ...

4 min lesing
MCP Security +5
Attesterbar MCP-server
Attesterbar MCP-server

Attesterbar MCP-server

Integrer FlowHunt med Attesterbar MCP-server for å muliggjøre sikker, ekstern attestasjon og verifiserbar kodeintegritet ved bruk av Intel SGX og RA-TLS. Oppnå ...

3 min lesing
AI Attestation +4