OAuth2 је индустријски стандард протокол за ауторизацију, који омогућава безбедан приступ ресурсима без дељења акредитива. У имплементацијама MCP (Model Context Protocol), OAuth2 пружа робустан начин за аутентификацију и ауторизацију клијената (као што су AI агенти) за приступ MCP серверима и њиховим алатима.
Ова лекција показује како се имплементира OAuth2 аутентификација за MCP сервере користећи Spring Boot, уобичајени образац за предузетничка и продукциона окружења.
До краја ове лекције, моћи ћете:
- Разумети како се OAuth2 интегрише са MCP серверима
- Имплементирати Spring Authorization Server за издавање токена
- Заштитити MCP крајње тачке JWT базираном аутентификацијом
- Конфигурисати client credentials flow за комуникацију машина са машинама
- Основно разумевање Јаве и Spring Boot-а
- Познавање MCP концепата из ранијих модула
- Инсталиран Maven или Gradle
Овај пројекат је минимална Spring Boot апликација која делује као:
- Spring Authorization Server (који издаје JWT приступне токене преко
client_credentialsфлоуа), и - Resource Server (који штити свој
/helloкрајњу тачку).
Он огледа подешавање приказано у Spring блог посту (2. април 2025).
# компајлирај и покрени
./mvnw spring-boot:run
# доби токен
curl -u mcp-client:secret -d grant_type=client_credentials \
http://localhost:8081/oauth2/token | jq -r .access_token > token.txt
# позови заштићени крајњи точак
curl -H "Authorization: Bearer $(cat token.txt)" http://localhost:8081/helloМожете тестирати безбедносну OAuth2 конфигурацију следећим корацима:
# Ово треба да врати 401 Unauthorized, што потврђује да је OAuth2 безбедност активна
curl -v http://localhost:8081/# Преузмите и издвојите цео одговор са токеном
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"
# Или да издвојите само токен (потребан је 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Напомена: Basic Authentication заглавље (bWNwLWNsaWVudDpzZWNyZXQ=) је Base64 кодирање од mcp-client:secret.
# Коришћење сачуваног токена
curl -H "Authorization: Bearer $(cat token.txt)" http://localhost:8081/hello
# Или директно са вредношћу токена
curl -H "Authorization: Bearer eyJra...token_value...xyz" http://localhost:8081/helloУспешан одговор са "Hello from MCP OAuth2 Demo!" потврђује да OAuth2 конфигурација исправно ради.
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 8081Улазни FQDN постаје ваш issuer (https://<fqdn>).
Azure аутоматски обезбеђује поверењиву TLS сертификату за *.azurecontainerapps.io.
Додајте ову inbound политику у свој 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 ће преузети JWKS и валидирати сваки захтев.
Изјава о одрицању одговорности:
Овај документ је преведен помоћу услуге за аутоматски превод Co-op Translator. Иако се трудимо да обезбедимо прецизност, молимо да имате у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитетним извором. За критичне информације препоручује се професионални људски превод. Не сносимо одговорност за било каква неспоразума или погрешне тумачења проистекла из коришћења овог превода.