Keycloak · Realm fastfood (roles, clientes y pruebas)
Servidor: srv-app-01 (Keycloak 24)
URL Admin: https://auth.erre.com/
Objetivo: Dejar listo el realm fastfood con roles, clientes (web y api) y pruebas de token.
1. Prerrequisitos
- Reverse proxy + HTTPS operativos para
auth.erre.com. - Acceso a la consola de administración (usuario admin ya creado).
- Para pruebas locales,
/etc/hostsdel cliente:auth.erre.com api.erre.com app.erre.com
2. Crear el realm y roles
- Entra a Administration Console → Create realm → Name:
fastfood. - En
fastfood→ Realm roles → Create role: ROLE_USERROLE_ADMIN
3. Cliente web-fastfood (frontend)
- Clients → Create client
- Client type: OpenID Connect
- Client ID:
web-fastfood→ Next
- Login settings
- Client authentication: OFF (cliente público)
- Standard Flow: ON (Authorization Code)
- Direct access grants: OFF
- Implicit flow: OFF
- PKCE: Required
- Valid redirect URIs:
https://app.erre.com/*http://localhost:3000/*(opcional dev)
- Web origins:
https://app.erre.comhttp://localhost:3000(opcional dev)
- Home URL:
https://app.erre.com/
Resultado: los tokens del front incluirán
aud: ["api-fastfood"], que tu API verificará.
4. Cliente api-fastfood (backend)
Recomendado: Confidential + Service Accounts
1. Clients → Create client
* Client ID: api-fastfood → Next
* Client authentication: ON
* Standard flow: OFF
* Direct access grants: OFF
* Service accounts: ON → Save
2. Credentials → copia el Client secret y guárdalo en secreto (no subir a repos públicos).
Nota: si tu framework no necesita “bearer-only”, no lo marques; con validar firma,
issyaudbasta.
5. Usuario de prueba
- Users → Add user →
tester - Credentials → setea contraseña (sin “Change on first login” para pruebas).
- Role mappings → asigna
ROLE_USER(yROLE_ADMINsi aplica).
6. Endpoints útiles
- Issuer (realm):
https://auth.erre.com/realms/fastfood - OpenID Configuration:
https://auth.erre.com/realms/fastfood/.well-known/openid-configuration - JWKS (clave pública para verificar JWT):
https://auth.erre.com/realms/fastfood/protocol/openid-connect/certs
7. Pruebas rápidas
- Token client_credentials (M2M) para
api-fastfood -
Ejecutar desde una máquina que resuelva
auth.erre.com(local):curl -s -X POST \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'grant_type=client_credentials' \ -d 'client_id=api-fastfood' \ -d 'client_secret=SECRETO' \ https://auth.erre.com/realms/fastfood/protocol/openid-connect/token | jq . -
Verifica que el access_token tenga:
iss=https://auth.erre.com/realms/fastfoodaudcontengaapi-fastfoodexpválido -
Flujo Authorization Code + PKCE (frontend) Config recomendada del front (ej. React/Vite):
authority / issuer:
https://auth.erre.com/realms/fastfoodclient_id:
web-fastfoodredirect_uri:
https://app.erre.com/callbackresponse_type:
codescope:
openid profile email rolespkce:
S256
8. Backup del realm (versionable)
-
Úsalo para migrar o recuperar configuración. No publiques secretos en repos públicos.
- Exportar a archivo dentro del contenedor
docker exec keycloak /opt/keycloak/bin/kc.sh export \ --realm fastfood \ --users realm_file \ --file /tmp/fastfood-realm.json -
Copiar al host
docker cp keycloak:/tmp/fastfood-realm.json /tmp/fastfood-realm.json -
Guarda
/tmp/fastfood-realm.jsonen un repo privado o cifrado (ej. sops). - Import (referencia):
kc.sh import --file /ruta/fastfood-realm.json --realm fastfood
- Exportar a archivo dentro del contenedor