Naar de inhoud springen

Zoek in de documentatie

Typ om elke pagina van de documentatie te doorzoeken.

Documentatiemenu
How-toDoelgroep · Beheerders & ontwikkelaars

Authenticatie met Keycloak

OIDC-authenticatie voor de REST API en de MCP-server

Deze pagina is automatisch vanuit het Engels vertaald. Bij verschillen geldt het origineel.Het origineel in het Engels lezen

Hoe Agent-Lab Keycloak gebruikt

Keycloak beheert authenticatie en autorisatie via OpenID Connect. Als auth.enabled op true staat (zie de Configuratiereferentie):

  • valideert de FastAPI-middleware bij elk request bearer-tokens tegen de JWKS van de realm, met de standaarduitzonderingen (/auth/*, /status/*, /docs, /openapi.json, /mcp, /static);
  • biedt de /auth-router endpoints voor inloggen, vernieuwen, het profiel en een exchange-endpoint voor Microsoft Entra ID;
  • authenticeert de MCP-server clients via een OAuth-proxy die op dezelfde realm steunt, en publiceert die de standaard .well-known-metadata-endpoints.

Een realm, client en serviceaccount configureren

De onderstaande stappen gebruiken de Keycloak Admin API. Stel eerst je beheerdersgegevens en endpoint in:

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')

Maak een realm aan (vervang <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}'

Maak een client aan voor 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"
  }'

Haal het client secret op:

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')

Deze waarden komen overeen met de configuratiesleutels auth.* (auth.url, auth.realm, auth.client_id, auth.client_secret) — sla ze op in de Vault-payload zoals beschreven in de Configuratiereferentie.

Maak een gebruiker voor een serviceaccount aan:

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}]
  }'

Verfijn indien nodig rollen en mappers in de Keycloak-UI.

Tokens uitgeven en verifiëren

Haal een gebruikerstoken op (password grant — dezelfde flow die POST /auth/login aan de kant van de app uitvoert):

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

Tokens worden vernieuwd via POST /auth/renew, en tokens van gebruikers die in Microsoft Entra ID zijn geauthenticeerd, kunnen via POST /auth/exchange worden ingewisseld voor app-tokens (PKCE-authorization-code-flow, op basis van de Entra ID-gegevens in de configuratie).

Geautomatiseerde provisioning

De Terraform-module terraform/12_agent-lab-auth-realm/ (onderdeel van de deploymenthandleiding) richt de realm, client en het serviceaccount in voor de referentiedeployment — gebruik deze in echte omgevingen in plaats van de handmatige stappen.