4.8 KiB
MCP OAuth2 Demo
Johdanto
OAuth2 on alan standardiprotokolla valtuutukseen, joka mahdollistaa turvallisen pääsyn resursseihin ilman tunnistetietojen jakamista. MCP (Model Context Protocol) -toteutuksissa OAuth2 tarjoaa vankan tavan todentaa ja valtuuttaa asiakkaat (kuten tekoälyagentit) pääsemään MCP-palvelimille ja niiden työkaluihin.
Tämä opetus näyttää, kuinka toteuttaa OAuth2-todennus MCP-palvelimille käyttäen Spring Bootia, joka on yleinen malli yritys- ja tuotantoympäristöissä.
Oppimistavoitteet
Tämän oppitunnin lopussa osaat:
- Ymmärtää, miten OAuth2 integroituu MCP-palvelimiin
- Toteuttaa Spring Authorization Serverin tokenien myöntämistä varten
- Suojata MCP-päätepisteet JWT-pohjaisella todennuksella
- Määrittää client credentials -vuon koneiden väliseen viestintään
Esivaatimukset
- Perustietämys Javasta ja Spring Bootista
- Tutustuminen MCP-käsitteisiin aiemmista moduuleista
- Maven tai Gradle asennettuna
Projektin yleiskuvaus
Tämä projekti on minimaalinen Spring Boot -sovellus, joka toimii sekä:
- Spring Authorization Serverina (joka myöntää JWT-pääsytokeneita
client_credentials-vuon kautta), että - Resource Serverina (joka suojaa oman
/hello-päätepisteensä).
Se peilaa asetusta, joka on esitetty Spring-blogikirjoituksessa (2.4.2025).
Nopeasti käyntiin (paikallisesti)
# käännä ja suorita
./mvnw spring-boot:run
# hanki tunnus
curl -u mcp-client:secret -d grant_type=client_credentials \
http://localhost:8081/oauth2/token | jq -r .access_token > token.txt
# kutsu suojattua päätepistettä
curl -H "Authorization: Bearer $(cat token.txt)" http://localhost:8081/hello
OAuth2-konfiguraation testaus
Voit testata OAuth2-tietoturvakonfiguraatiota seuraavin vaiheisin:
1. Varmista palvelimen käynnissäolo ja suojaus
# Tämän pitäisi palauttaa 401 Unauthorized, vahvistaen että OAuth2-suojaus on aktiivinen
curl -v http://localhost:8081/
2. Hanki pääsytoken client credentials -menetelmällä
# Hae ja pura täydellinen tunnistusmerkin vastaus
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"
# Tai pura pelkkä tunnistusmerkki (vaatii jq:n)
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.txt
Huomautus: Basic-todennusotsikko (bWNwLWNsaWVudDpzZWNyZXQ=) on Base64-koodaus merkkijonosta mcp-client:secret.
3. Käytä suojattua päätepistettä tokenilla
# Tallennetun tunnisteen käyttäminen
curl -H "Authorization: Bearer $(cat token.txt)" http://localhost:8081/hello
# Tai suoraan tunnistearvolla
curl -H "Authorization: Bearer eyJra...token_value...xyz" http://localhost:8081/hello
Onnistunut vastaus "Hello from MCP OAuth2 Demo!" vahvistaa, että OAuth2-konfiguraatio toimii oikein.
Kontin rakentaminen
docker build -t mcp-oauth2-demo .
docker run -p 8081:8081 mcp-oauth2-demo
Julkaisu Azure Container Apps -ympäristöön
az containerapp up -n mcp-oauth2 \
-g demo-rg -l westeurope \
--image <your-registry>/mcp-oauth2-demo:latest \
--ingress external --target-port 8081
Sisäänpääsyn FQDN toimii sinun issuerinä (https://<fqdn>).
Azure tarjoaa automaattisesti luotettavan TLS-varmenteen *.azurecontainerapps.io-domainille.
Yhdistäminen Azure API Managementiin
Lisää tämä inbound-politiikka API:llesi:
<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 hakee JWKS:n ja validoi jokaisen pyynnön.
Mitä seuraavaksi
Vastuuvapauslauseke: Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua Co-op Translator. Pyrimme tarkkuuteen, mutta ota huomioon, että automaattikäännöksissä voi esiintyä virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää auktoritatiivisena lähteenä. Tärkeissä tiedoissa suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinkäsityksistä tai virhetulkinnoista.