MCP-autentisering och auktorisering: OAuth 2.1, tokendelegering och problemet med den förvirrade ställföreträdaren

MCP Security OAuth 2.1 Authentication AI Security

Autentisering är den grindvakt som avgör om en MCP-servers kraftfulla funktioner är tillgängliga för legitima användare eller för angripare. Gör fel, och alla andra säkerhetskontroller blir irrelevanta — en oautentiserad eller dåligt autentiserad MCP-server med åtkomst till e-post, filer och databaser är en kritisk sårbarhet oavsett hur väl du har härdat allt annat.

OWASP GenAI Security Projects guide identifierar autentisering och auktorisering som en av de åtta kärndomänerna för säkerhet för MCP-servrar, med specifika krav som går bortom vad de flesta utvecklare implementerar som standard. Detta inlägg förklarar varför dessa krav finns och hur man implementerar dem korrekt.

Autentiseringsutmaningen i MCP

MCP-servrar står inför ett mer komplext autentiseringslandskap än traditionella tjänster eftersom de förmedlar mellan flera huvudmän:

  • Användaren vars instruktioner driver AI-assistenten
  • AI-modellen som tolkar instruktioner och anropar verktyg
  • MCP-klienten (applikationen som är värd för AI:n)
  • MCP-servern som utför verktygsanrop
  • Nedströmstjänster som MCP-servern anropar på användarens vägnar

Var och en av dessa relationer kräver sina egna autentiserings- och auktoriseringskontroller. En svaghet i någon länk kan utnyttjas för att kringgå de andra.

Obligatoriskt: OAuth 2.1 och OIDC för fjärrservrar

För fjärr-MCP-servrar — de som nås över ett nätverk snarare än genom lokala STDIO- eller Unix-sockets — är OWASP GenAI-guiden otvetydig: OAuth 2.1 med OIDC är obligatoriskt, inte valfritt.

Detta krav finns eftersom:

OAuth 2.1 tillhandahåller explicit scopekontroll. Varje åtkomsttoken deklarerar exakt vilka resurser och åtgärder den auktoriserar. En MCP-server kan vid verktygsanropstillfället verifiera att den presenterade token har det specifika scope som behövs för den åtgärden — inte bara att användaren är autentiserad, utan att de är auktoriserade för just denna specifika operation.

OIDC tillhandahåller kryptografisk identitet. OpenID Connect lägger till identitetsförsäkringar (ID-token) som MCP-servern kan verifiera utan att göra en rundtur till identitetsleverantören. Servern validerar iss (utfärdare), aud (målgrupp), exp (utgång) och signatur vid varje begäran.

OAuth 2.1-tokens är kortlivade av design. Den moderna OAuth-specifikationen (som konsoliderar och ersätter OAuth 2.0 bästa praxis) betonar kortlivade åtkomsttokens som måste uppdateras regelbundet. Detta begränsar skadans fönster om en token komprometteras.

Vad som ska valideras vid varje begäran

Validera inte tokens endast vid sessionsupprättande. Validera vid varje verktygsanrop:

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

Cacha aldrig valideringsresultat över förfrågningar. En token som var giltig vid sessionens start kan återkallas mitt i sessionen.

Dynamiska klientmiljöer

I miljöer där MCP-klienter ändras ofta (t.ex. olika AI-assistenter som ansluter till samma server) är statiska API-nycklar eller fördelade hemligheter otillräckliga. Använd dynamisk klientregistrering med OAuth 2.1 eller OIDC för att verifiera klientidentitet vid anslutningstillfället. Tillåtna listor, hårdkodade anslutningspolicyer eller ömsesidig TLS (mTLS) är lämpliga för kända statiska relationer mellan specifika klienter och servrar.

Logo

Redo att växa ditt företag?

Starta din kostnadsfria provperiod idag och se resultat inom några dagar.

Problemet med den förvirrade ställföreträdaren

Förstå attacken

Den förvirrade ställföreträdaren är en klassisk auktoriseringssårbarhet med en särskilt farlig manifestation i MCP-arkitekturer. Attacken utnyttjar tvetydigheten i vems auktoritet en MCP-server agerar med.

Tänk dig detta scenario:

  • Användaren Alice är autentiserad till en MCP-server med begränsade behörigheter — hon kan läsa sina egna filer men inte andras
  • MCP-servern har breda tjänstekontobehörigheter för att läsa alla filer i organisationen
  • MCP-servern använder token passthrough: den vidarebefordrar Alices token till nedströmstjänster

När Alice ber AI-assistenten att “sammanfatta min projektmapp” använder servern Alices token för att komma åt hennes filer — korrekt beteende. Men om en angripare lurar servern att göra en begäran med sina egna tjänsteautentiseringsuppgifter (kanske genom en verktygsförgiftningsattack eller indirekt prompt-injektion), används serverns förhöjda behörigheter för att komma åt filer som Alice inte är auktoriserad att se.

Servern är den “förvirrade ställföreträdaren” — den har lurat sig att använda sin auktoritet på uppdrag av någon som inte har den auktoriteten, och agerar som en proxy för privilegieeskalering.

Varför token passthrough skapar denna sårbarhet

Många MCP-implementeringar vidarebefordrar klientens token till nedströms-API:er för enkelhetens skull. Detta verkar intuitivt — användarens token representerar användarens behörigheter, så att använda den för alla nedströmsanrop upprätthåller korrekt åtkomstkontroll.

Problemet: nedströms-API:er som känner igen MCP-servern som en betrodd mellanhand kan bevilja förfrågningar med serverns identitetsnivå, inte den vidarebefordrade användartokens nivå. Och om MCP-servern någonsin agerar på eget initiativ — genom AI-beslutsfattande som användaren inte uttryckligen begärde — kan den använda sina egna autentiseringsuppgifter snarare än användarens token.

Att vidarebefordra användartokens:

  • Bryter revisionsspår (nedströmsloggar visar användaridentitet, inte serveridentitet, vilket döljer MCP-lagret)
  • Ger en angripare som komprometterar MCP-servern åtkomst till alla vidarebefordrade användartokens
  • Skapar efterlevnadsproblem om tokens för olika användare kan förväxlas eller spelas upp igen

Lösningen: Explicit tokendelegering med On-Behalf-Of-flöden

Istället för att vidarebefordra klienttokens bör MCP-servern erhålla sina egna tokens för nedströms tjänståtkomst med hjälp av OAuths On-Behalf-Of (OBO)-flöde:

Användaren autentiserar till MCP-klienten → klienten får användaråtkomsttoken
MCP-klienten presenterar användartoken för MCP-servern
MCP-servern byter ut användartoken mot en servertoken via OBO-flöde:
  POST /token
  grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
  assertion=<user_access_token>
  scope=<minimum_required_scope>
MCP-servern använder sin egen OBO-token för nedströmsanrop

OBO-token:

  • Är uttryckligen scopad till de minimibehörigheter som behövs för det specifika verktygsanropet
  • Identifierar MCP-servern som den anropande parten (med användaren som subjekt)
  • Är knuten till användarens autentiseringshändelse (kan återkallas när användarens session avslutas)
  • Exponerar inte användarens fullständiga token för nedströmstjänster

Kortlivade, scopade tokens

OWASP GenAI-guiden ger en specifik rekommendation: utfärda åtkomsttokens med livslängder mätta i minuter, inte timmar. Detta gäller både de tokens som MCP-servern accepterar från klienter och de tokens den erhåller för nedströms tjänståtkomst.

Varför korta livslängder spelar roll

En stulen åtkomsttoken är giltig under hela sin livslängd oavsett om den legitima användaren har loggat ut, ändrat sitt lösenord eller återkallat sin session. En 24-timmars token som stulits i början av en session ger en angripare 24 timmars ihållande åtkomst. En 5-minuters token som stulits mitt i sessionen ger högst 5 minuter.

Kortlivade tokens upprätthåller också regelbundna återautentiseringshändelser, som ger möjligheter att:

  • Återkontrollera om användarens konto har stängts av eller deras behörigheter ändrats
  • Upptäcka avvikande autentiseringsmönster (ovanliga tider, platser eller frekvens)
  • Tillämpa steg-upp-autentisering för känsliga operationer

Minimering av token scope

Varje token bör endast bära de scopes som behövs för den specifika operationen som utförs. Utfärda inte en token med read:files write:files delete:files scope när det aktuella verktygsanropet bara behöver read:files. Detta begränsar skadan om token fångas upp eller modellen manipuleras till oväntade verktygsanrop.

def get_tool_token(user_id: str, tool_name: str) -> str:
    # Mappa verktyg till minimalt nödvändiga scopes
    required_scopes = TOOL_SCOPE_MAP[tool_name]

    return oauth_client.get_token(
        subject=user_id,
        scopes=required_scopes,
        lifetime_seconds=300  # 5 minuters livslängd
    )

Behandla sessioner som tillstånd, inte identitet

Ett vanligt misstag är att använda sessions-ID som auktoriseringsproxyer: om en begäran bär ett giltigt sessions-ID antar servern att den är auktoriserad. Detta blandar ihop tillståndshantering med identitetsverifiering.

Den korrekta modellen: sessions-ID hanterar konversationstillstånd. Auktorisering verifieras oberoende vid varje begäran genom att validera OAuth-tokens anspråk. Även en begäran som bär ett giltigt sessions-ID måste presentera en giltig, icke-utgången, korrekt scopad OAuth-token innan något verktygsanrop tillåts.

Detta spelar roll eftersom sessions-ID kan stjälas, gissas eller spelas upp igen på sätt som OAuth-tokens — som bär kryptografiska integritetsgarantier — inte kan.

Centraliserad policyupprätthållande

Snarare än att implementera auktoriseringskontroller utspridda genom enskilda verktygshanterare, rekommenderar OWASP GenAI-guiden en centraliserad policygateway som:

  • Fångar upp alla verktygsanropsförfrågningar innan de når verktygsspecifik kod
  • Validerar autentisering (token-signatur, utfärdare, målgrupp, utgång)
  • Upprätthåller auktorisering (nödvändigt scope för detta specifika verktyg)
  • Tillämpar samtyckesverifiering (har användaren uttryckligen auktoriserat denna typ av åtgärd?)
  • Implementerar verktygsfiltrering (är detta verktyg tillåtet i detta distributionssammanhang?)
  • Loggar alla beslut med full kontext för revision

Centralisering säkerställer att policyer tillämpas konsekvent över alla verktyg och agenter. En verktygsspecifik auktoriseringskontroll kan glömmas bort eller kringgås under utvecklingen; en gateway-kontroll kan inte.

Sammanfattning: Checklistan för autentisering

För fjärr-MCP-servrar är den minsta säkerhetsnivån för autentisering:

  • OAuth 2.1 / OIDC upprätthålls för alla anslutningar
  • Token-signatur, utfärdare, målgrupp och utgång valideras vid varje verktygsanrop
  • Ingen token passthrough till nedströms-API:er — använd OBO eller serverutfärdade tokens
  • Åtkomsttokens scopade till minimalt nödvändiga behörigheter per verktyg
  • Token-livslängder mätta i minuter med obligatorisk uppdatering
  • Sessions-ID används inte som auktoriseringsproxyer
  • Centraliserad policyupprätthållandegateway på plats
  • Alla autentiseringshändelser och auktoriseringsbeslut loggas oföränderligt

Relaterade resurser

Vanliga frågor

Varför kräver MCP OAuth 2.1 snarare än enklare autentiseringsmetoder?

OAuth 2.1 krävs för fjärr-MCP-servrar eftersom det tillhandahåller delegerad auktorisering med explicit scopekontroll, kortlivade tokens, kryptografisk verifiering och standardiserade identitetsförsäkringar (via OIDC). Enklare metoder som API-nycklar eller sessionskakor saknar den scopegranularitet som behövs för att implementera åtkomst med minsta privilegium, tillhandahåller inte kryptografiska identitetsgarantier och är svåra att återkalla granulerat när en session avslutas.

Vad är problemet med den förvirrade ställföreträdaren i MCP?

Den förvirrade ställföreträdaren är en attack för privilegieeskalering där MCP-servern luras att använda sina egna (högre) privilegier för att utföra åtgärder som den begärande användaren inte är auktoriserad att utföra. Det inträffar när token passthrough används — servern vidarebefordrar en användares token till nedströms-API:er, vilket kan ge användaren åtkomst som de inte borde ha baserat på serverns betrodda status. Lösningen är att använda On-Behalf-Of-tokenflöden där tokens uttryckligen utfärdas för MCP-serverns specifika åtkomstscope.

Vad är token passthrough och varför är det farligt i MCP?

Token passthrough innebär att MCP-servern vidarebefordrar klientens autentiseringstoken direkt till nedströms-API:er, snarare än att använda sina egna serverutfärdade autentiseringsuppgifter. Detta är farligt eftersom: (1) det bryter revisionsspår — nedströmssystem ser användartoken, inte MCP-servern, vilket gör det omöjligt att tillskriva åtgärder till servern; (2) det kringgår MCP-serverns egna åtkomstpolicyer; (3) det skapar en sårbarhet för den förvirrade ställföreträdaren om nedströms-API:et litar mer på MCP-serverns identitet än på användarens; och (4) om MCP-servern komprometteras, får angriparen åtkomst till vidarebefordrade användartokens för alla anslutna nedströmstjänster.

Hur korta bör MCP-åtkomsttokens vara?

OWASP GenAI-guiden rekommenderar tokens med livslängder mätta i minuter, inte timmar eller dagar. Kortare tokenlivslängder begränsar utnyttjandefönstret om en token blir stulen eller en session kapas. Varje verktygsanrop bör återvalidera tokens signatur, målgrupp och utgång — inte förlita sig på cachad validering från sessionens start.

Arshia är en AI-arbetsflödesingenjör på FlowHunt. Med en bakgrund inom datavetenskap och en passion för AI, specialiserar han sig på att skapa effektiva arbetsflöden som integrerar AI-verktyg i vardagliga uppgifter, vilket förbättrar produktivitet och kreativitet.

Arshia Kahani
Arshia Kahani
AI-arbetsflödesingenjör

Är din MCP-autentiseringsarkitektur säker?

Vårt säkerhetsteam bedömer MCP-autentiseringskonfigurationer, tokenhantering och auktoriseringsflöden mot OWASP GenAI-standarder. Identifiera luckor innan angripare gör det.

Lär dig mer

Authenticator App MCP-server
Authenticator App MCP-server

Authenticator App MCP-server

Authenticator App MCP-server möjliggör för AI-agenter att säkert komma åt 2FA-koder och lösenord, vilket förenklar automatiserade inloggningsprocesser och hante...

4 min läsning
MCP Security +5
Attesterbar MCP-server
Attesterbar MCP-server

Attesterbar MCP-server

Den attesterbara MCP-servern tillför fjärrattestering och konfidentiell databehandling till FlowHunt-arbetsflöden, så att AI-agenter och klienter kan verifiera ...

4 min läsning
Security AI Infrastructure +4