4.6 KiB
MCP OAuth2 Demo
Uvod
OAuth2 je industrijski standardni protokol za avtorizacijo, ki omogoča varen dostop do virov brez deljenja poverilnic. V izvedbah MCP (Model Context Protocol) OAuth2 zagotavlja močan način za preverjanje pristnosti in avtorizacijo odjemalcev (kot so AI agenti) za dostop do MCP strežnikov in njihovih orodij.
Ta lekcija prikazuje, kako implementirati OAuth2 preverjanje pristnosti za MCP strežnike z uporabo Spring Boot, kar je pogost vzorec za podjetniške in produkcijske implementacije.
Cilji učenja
Na koncu te lekcije boste:
- Razumeli, kako se OAuth2 integrira z MCP strežniki
- Implementirali Spring avtorizacijski strežnik za izdajo žetonov
- Zaščitili MCP končne točke z JWT osnovano preverjanje pristnosti
- Konfigurirali pretok poverilnic odjemalca za komunikacijo stroj-stroj
Pogoji
- Osnovno razumevanje Jave in Spring Boot
- Poznavanje MCP konceptov iz prejšnjih modulov
- Namestitev Mavena ali Gradla
Pregled projekta
Ta projekt je minimalna Spring Boot aplikacija, ki deluje kot:
- Spring avtorizacijski strežnik (izdaja JWT dostopne žetone preko
client_credentialspretoka), in - Strežnik virov (varuje svojo
/hellokončno točko).
Sledi postavitvi prikazani v Spring blog objavi (2. april 2025).
Hiter začetek (lokalno)
# sestavi in zaženi
./mvnw spring-boot:run
# pridobi žeton
curl -u mcp-client:secret -d grant_type=client_credentials \
http://localhost:8081/oauth2/token | jq -r .access_token > token.txt
# pokliči zaščiteno končno točko
curl -H "Authorization: Bearer $(cat token.txt)" http://localhost:8081/hello
Testiranje OAuth2 konfiguracije
OAuth2 varnostno konfiguracijo lahko preizkusite z naslednjimi koraki:
1. Preverite, da strežnik deluje in je zaščiten
# To bi moralo vrniti 401 Unauthorized, kar potrjuje, da je varnost OAuth2 aktivna
curl -v http://localhost:8081/
2. Pridobite dostopni žeton z uporabo poverilnic odjemalca
# Pridobite in izvlecite celoten odziv žetona
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"
# Ali pa izvlecite samo žeton (zahteva 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.txt
Opomba: Glava Basic Authentication (bWNwLWNsaWVudDpzZWNyZXQ=) je Base64 kodiranje mcp-client:secret.
3. Dostopajte do zaščitene končne točke z žetonom
# Uporaba shranjenega žetona
curl -H "Authorization: Bearer $(cat token.txt)" http://localhost:8081/hello
# Ali neposredno z vrednostjo žetona
curl -H "Authorization: Bearer eyJra...token_value...xyz" http://localhost:8081/hello
Uspešen odziv z "Hello from MCP OAuth2 Demo!" potrjuje, da OAuth2 konfiguracija deluje pravilno.
Gradnja kontejnerja
docker build -t mcp-oauth2-demo .
docker run -p 8081:8081 mcp-oauth2-demo
Namestitev v Azure Container Apps
az containerapp up -n mcp-oauth2 \
-g demo-rg -l westeurope \
--image <your-registry>/mcp-oauth2-demo:latest \
--ingress external --target-port 8081
Vhodni FQDN postane vaš izdajatelj (https://<fqdn>).
Azure samodejno nudi zaupanja vredno TLS potrdilo za *.azurecontainerapps.io.
Integracija z Azure API Management
Dodajte to vhodno pravilo svojemu API-ju:
<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 bo prenesel JWKS in preveril vsak zahtevek.
Kaj sledi
Omejitev odgovornosti: Ta dokument je bil preveden z uporabo storitve za avtomatski prevod AI Co-op Translator. Čeprav si prizadevamo za natančnost, prosimo, upoštevajte, da lahko avtomatski prevodi vsebujejo napake ali netočnosti. Izvirni dokument v izvirnem jeziku velja za avtoritativni vir. Za pomembne informacije priporočamo strokovni človeški prevod. Ne odgovarjamo za morebitna nesporazume ali napačne interpretacije, ki izhajajo iz uporabe tega prevoda.