Skip to content

Latest commit

 

History

History
147 lines (100 loc) · 6.4 KB

File metadata and controls

147 lines (100 loc) · 6.4 KB

MCP OAuth2 Demo

Увод

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 конфигурације

Можете тестирати безбедносну OAuth2 конфигурацију следећим корацима:

1. Проверите да сервер ради и да је заштићен

# Ово треба да врати 401 Unauthorized, што потврђује да је OAuth2 безбедност активна
curl -v http://localhost:8081/

2. Преузмите приступни токен коришћењем client credentials

# Преузмите и издвојите цео одговор са токеном
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.

3. Приступите заштићеној крајњој тачки користећи токен

# Коришћење сачуваног токена
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-demo

Деплој на 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

Улазни FQDN постаје ваш issuer (https://<fqdn>).
Azure аутоматски обезбеђује поверењиву TLS сертификату за *.azurecontainerapps.io.


Укључивање у Azure API Management

Додајте ову 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. Иако се трудимо да обезбедимо прецизност, молимо да имате у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитетним извором. За критичне информације препоручује се професионални људски превод. Не сносимо одговорност за било каква неспоразума или погрешне тумачења проистекла из коришћења овог превода.