OAuth2 er industristandardprotokollen for autorisation, der muliggør sikker adgang til ressourcer uden at dele legitimationsoplysninger. I MCP (Model Context Protocol) implementeringer giver OAuth2 en robust måde at autentificere og autorisere klienter (såsom AI-agenter) til at få adgang til MCP-servere og deres værktøjer.
Denne lektion demonstrerer, hvordan man implementerer OAuth2-autentificering for MCP-servere ved hjælp af Spring Boot, et almindeligt mønster til enterprise- og produktionsudrulninger.
I slutningen af denne lektion vil du:
- Forstå, hvordan OAuth2 integreres med MCP-servere
- Implementere en Spring Authorization Server til udstedelse af tokens
- Beskytte MCP-endpoints med JWT-baseret autentificering
- Konfigurere client credentials flow til maskine-til-maskine kommunikation
- Grundlæggende forståelse af Java og Spring Boot
- Fortrolighed med MCP-koncepter fra tidligere moduler
- Maven eller Gradle installeret
Dette projekt er en minimal Spring Boot-applikation, der fungerer både som:
- en Spring Authorization Server (udsteder JWT adgangstokens via
client_credentialsflow), og - en Resource Server (beskytter sit eget
/helloendpoint).
Den spejler opsætningen vist i Spring blogindlægget (2. apr 2025).
# byg og kør
./mvnw spring-boot:run
# få en token
curl -u mcp-client:secret -d grant_type=client_credentials \
http://localhost:8081/oauth2/token | jq -r .access_token > token.txt
# kald det beskyttede endpoint
curl -H "Authorization: Bearer $(cat token.txt)" http://localhost:8081/helloDu kan teste OAuth2-sikkerhedskonfigurationen med følgende trin:
# Dette skulle returnere 401 Unauthorized, hvilket bekræfter, at OAuth2-sikkerhed er aktiv
curl -v http://localhost:8081/# Hent og udpak det komplette token-svar
curl -v -X POST http://localhost:8081/oauth2/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Authorization: Basic bWNwLWNsaWVudDpzZWNyZXQ=" \
-d "grant_type=client_credentials&scope=mcp.access"
# Eller for kun at udpakke token (kræver jq)
curl -s -X POST http://localhost:8081/oauth2/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Authorization: Basic bWNwLWNsaWVudDpzZWNyZXQ=" \
-d "grant_type=client_credentials&scope=mcp.access" | jq -r .access_token > token.txtBemærk: Basic Authentication headeren (bWNwLWNsaWVudDpzZWNyZXQ=) er Base64-kodningen af mcp-client:secret.
# Brug af den gemte token
curl -H "Authorization: Bearer $(cat token.txt)" http://localhost:8081/hello
# Eller direkte med tokenværdien
curl -H "Authorization: Bearer eyJra...token_value...xyz" http://localhost:8081/helloEt succesfuldt svar med "Hello from MCP OAuth2 Demo!" bekræfter, at OAuth2-konfigurationen fungerer korrekt.
docker build -t mcp-oauth2-demo .
docker run -p 8081:8081 mcp-oauth2-demoaz containerapp up -n mcp-oauth2 \
-g demo-rg -l westeurope \
--image <your-registry>/mcp-oauth2-demo:latest \
--ingress external --target-port 8081Ingress FQDN bliver din issuer (https://<fqdn>).
Azure leverer automatisk et betroet TLS-certifikat for *.azurecontainerapps.io.
Tilføj denne inbound policy til din API:
<inbound>
<validate-jwt header-name="Authorization">
<openid-config url="https://<fqdn>/.well-known/openid-configuration"/>
<audiences>
<audience>mcp-client</audience>
</audiences>
</validate-jwt>
<base/>
</inbound>APIM henter JWKS og validerer hver anmodning.
Ansvarsfraskrivelse: Dette dokument er oversat ved hjælp af AI-oversættelsestjenesten Co-op Translator. Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiske oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets modersmål skal betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse.