Content Security Policy
El SDK de Kaleidr se ejecuta en la página del cliente. Eso significa que la Content Security Policy de la página del cliente debe permitir los recursos que carga cada producto. Esta página contiene la configuración.
Por producto
Tile y Viewer (productos iframe)
Tile y Viewer cargan el mapa real dentro de map-embed.kaleidr.com, bajo la
CSP de Kaleidr. La página principal solo tiene que permitir el propio iframe y
el loader del SDK:
default-src 'self';
script-src 'self' https://cdn.kaleidr.com;
frame-src https://map-embed.kaleidr.com;
connect-src 'self' https://api.kaleidr.com;
No necesitas permitir hosts de imágenes de Mapbox / MapTiler / OSM / vendor en la página principal cuando solo integras Tile o Viewer — estos viven dentro del iframe de Kaleidr.
Chat y Editor (attach dentro de la página)
Chat y Editor montan MapLibre en el documento principal. La CSP de la página principal debe permitir todos los hosts que MapLibre y el SDK realmente carguen:
default-src 'self';
script-src 'self' 'wasm-unsafe-eval' https://cdn.kaleidr.com;
style-src 'self' 'unsafe-inline' https://cdn.kaleidr.com;
connect-src 'self'
https://api.kaleidr.com
https://api.mapbox.com https://events.mapbox.com
https://api.maptiler.com
https://*.tiles.mapbox.com;
img-src 'self' data: blob:
https://api.mapbox.com https://*.tiles.mapbox.com
https://api.maptiler.com
https://*.tile.openstreetmap.org;
worker-src 'self' blob:;
font-src 'self' data:;
'wasm-unsafe-eval' es obligatorio — MapLibre compila WebAssembly en tiempo de ejecución
y falla sin él. Si tu CSP prohíbe 'wasm-unsafe-eval', actualmente no puedes
montar Chat o Editor dentro de la página.
Qué falla primero
| Síntoma | Directiva probablemente ausente |
|---|---|
| El loader del SDK devuelve 404 o está bloqueado | script-src https://cdn.kaleidr.com |
| Falla la inicialización de MapLibre (Chat/Editor) | 'wasm-unsafe-eval' en script-src |
| Los tiles aparecen vacíos / grises | connect-src y/o img-src para el host del vendor |
| El iframe nunca se renderiza (Tile / Viewer) | frame-src https://map-embed.kaleidr.com |
| Session exchange devuelve 4xx en la consola | No es CSP — consulta la origin allowlist en Auth & scopes |
Nonces y hashes
'unsafe-inline' está incluido en style-src porque MapLibre genera
bloques <style> inline. Si tu CSP prohíbe actualmente 'unsafe-inline', utiliza un
nonce y vuelve a emitir los estilos bajo ese nonce — el SDK no genera actualmente
un nonce por carga; si necesitas uno, abre un issue en
kaleidr-sdk.
Despliegue report-only
La forma segura de adoptar esta política es:
- Configura el bloque anterior como
Content-Security-Policy-Report-Onlycon unareport-uride tu propiedad durante una semana. - Añade los hosts que aparezcan en los informes de infracciones a la directiva correcta.
- Cambia el header a
Content-Security-Policycuando los informes estén limpios.