Przejdź do treści

Szukaj w dokumentacji

Wpisz, aby przeszukać każdą stronę dokumentacji.

Menu dokumentacji
InstrukcjaOdbiorcy · Operatorzy i programiści

Uwierzytelnianie z Keycloak

Uwierzytelnianie OIDC dla REST API i serwera MCP

Ta strona została przetłumaczona automatycznie z języka angielskiego. W razie rozbieżności pierwszeństwo ma oryginał.Przeczytaj oryginał w języku angielskim

Jak Agent-Lab korzysta z Keycloak

Keycloak zarządza uwierzytelnianiem i autoryzacją przez OpenID Connect. Gdy auth.enabled ma wartość true (zobacz Dokumentację konfiguracji):

  • middleware FastAPI przy każdym żądaniu waliduje tokeny bearer względem JWKS realmu, ze standardowymi wyjątkami (/auth/*, /status/*, /docs, /openapi.json, /mcp, /static);
  • router /auth udostępnia logowanie, odnawianie tokenu, profil oraz endpoint wymiany dla Microsoft Entra ID;
  • serwer MCP uwierzytelnia klientów przez proxy OAuth oparte na tym samym realmie, publikując standardowe endpointy metadanych .well-known.

Konfiguracja realmu, klienta i konta usługi

Poniższe kroki korzystają z Keycloak Admin API. Najpierw ustaw dane logowania administratora i endpoint:

export ADMIN_USER=<admin_username>
export ADMIN_PASS=<admin_password>
export ADMIN_TOKEN=$(curl -s -X POST "https://<auth_fqdn>/realms/master/protocol/openid-connect/token" \
    -d "username=${ADMIN_USER}&password=${ADMIN_PASS}&grant_type=password&client_id=admin-cli" | jq -r '.access_token')

Utwórz realm (zastąp <realm_name>):

curl -X POST https://<auth_fqdn>/admin/realms \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${ADMIN_TOKEN}" \
  -d '{"realm": "<realm_name>", "enabled": true}'

Utwórz klienta dla Agent-Lab:

curl -X POST https://<auth_fqdn>/admin/realms/<realm_name>/clients \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${ADMIN_TOKEN}" \
  -d '{
    "clientId": "<client_name>",
    "enabled": true,
    "protocol": "openid-connect",
    "publicClient": false,
    "redirectUris": ["https://<agent_lab_fqdn>/*"],
    "standardFlowEnabled": true,
    "clientAuthenticatorType": "client-secret"
  }'

Pobierz sekret klienta:

export CLIENT_ID=$(curl -X GET "https://<auth_fqdn>/admin/realms/<realm_name>/clients?clientId=<client_name>" \
  -H "Authorization: Bearer ${ADMIN_TOKEN}" | jq -r '.[0].id')

export CLIENT_SECRET=$(curl -X GET "https://<auth_fqdn>/admin/realms/<realm_name>/clients/${CLIENT_ID}/client-secret" \
  -H "Authorization: Bearer ${ADMIN_TOKEN}" | jq -r '.value')

Te wartości odpowiadają kluczom konfiguracji auth.* (auth.url, auth.realm, auth.client_id, auth.client_secret) — zapisz je w ładunku Vault zgodnie z Dokumentacją konfiguracji.

Utwórz użytkownika konta usługi:

curl -X POST https://<auth_fqdn>/admin/realms/<realm_name>/users \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${ADMIN_TOKEN}" \
  -d '{
    "username": "<username>",
    "enabled": true,
    "email": "<username>@example.com",
    "credentials": [{"type": "password", "value": "<user_password>", "temporary": false}]
  }'

W razie potrzeby dostrój role i mapery w interfejsie Keycloak.

Wystawianie i weryfikacja tokenów

Pobierz token użytkownika (password grant — ten sam przepływ, który po stronie aplikacji wykonuje POST /auth/login):

export USER_TOKEN=$(curl -s -X POST https://<auth_fqdn>/realms/<realm_name>/protocol/openid-connect/token \
  -d "grant_type=password" \
  -d "client_id=<client_name>" \
  -d "client_secret=${CLIENT_SECRET}" \
  -d "username=<username>" \
  -d "password=<user_password>" | jq -r '.access_token')

curl -s https://<agent_lab_fqdn>/agents/list -H "Authorization: Bearer $USER_TOKEN" | jq

Tokeny odnawia się przez POST /auth/renew, a tokeny użytkowników uwierzytelnionych w Microsoft Entra ID można wymienić na tokeny aplikacji przez POST /auth/exchange (przepływ authorization code z PKCE, oparty na poświadczeniach Entra ID z konfiguracji).

Automatyczne przygotowanie

Moduł Terraform terraform/12_agent-lab-auth-realm/ (część przewodnika wdrażania) tworzy realm, klienta i konto usługi dla wdrożenia referencyjnego — w rzeczywistych środowiskach używaj go zamiast kroków ręcznych.