Saltar para o conteúdo

Pesquisar na documentação

Escreva para pesquisar em todas as páginas da documentação.

Menu da documentação
Guia práticoPúblico-alvo · Operadores e programadores

Autenticação com Keycloak

Autenticação OIDC para a API REST e o servidor MCP

Esta página foi traduzida automaticamente do inglês. Em caso de divergência, prevalece o original.Ler o original em inglês

Como o Agent-Lab utiliza o Keycloak

O Keycloak gere a autenticação e a autorização através do OpenID Connect. Quando auth.enabled é true (consulte a Referência de configuração):

  • o middleware FastAPI valida os bearer tokens face ao JWKS do realm em cada pedido, com as exclusões habituais (/auth/*, /status/*, /docs, /openapi.json, /mcp, /static);
  • o router /auth expõe início de sessão, renovação, perfil e um endpoint de troca de tokens do Microsoft Entra ID;
  • o servidor MCP autentica os clientes através de um proxy OAuth suportado pelo mesmo realm, publicando os endpoints de metadados .well-known padrão.

Configurar um realm, um cliente e uma conta de serviço

Os passos seguintes utilizam a Admin API do Keycloak. Comece por definir as credenciais de administrador e o 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')

Criar um realm (substitua <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}'

Criar um cliente para o 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"
  }'

Obter o segredo do cliente:

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

Estes valores correspondem às chaves de configuração auth.* (auth.url, auth.realm, auth.client_id, auth.client_secret) — guarde-os no payload do Vault conforme a Referência de configuração.

Criar um utilizador de conta de serviço:

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

Se necessário, ajuste as roles e os mappers na UI do Keycloak.

Emitir e verificar tokens

Obter um token de utilizador (password grant — o mesmo fluxo que POST /auth/login executa do lado da aplicação):

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

Os tokens são renovados através de POST /auth/renew, e os utilizadores autenticados no Microsoft Entra ID podem trocar as suas credenciais por tokens da aplicação através de POST /auth/exchange (fluxo authorization code com PKCE, suportado pelas credenciais do Entra ID presentes na configuração).

Aprovisionamento automatizado

O módulo Terraform terraform/12_agent-lab-auth-realm/ (parte do guia de deployment) aprovisiona o realm, o cliente e a conta de serviço para o deployment de referência — utilize-o em ambientes reais em vez dos passos manuais.