Saltar al contenido principal

CORS y origins permitidos

Las claves Publishable (kld_pk_live_…) contienen una lista de allowed-origins — los browser origins autorizados a utilizar la clave. Configúrala al crear la clave (p. ej. https://acme.com, https://app.acme.com); una live publishable key requiere al menos uno. Las claves Server (kld_sk_live_…) no reciben permiso CORS, por lo que una página nunca puede leer una respuesta generada con ellas. Ten en cuenta qué cubre y qué no: CORS bloquea la respuesta, no la solicitud — una server key incrustada en el código fuente ya ha quedado expuesta. Por eso el SDK rechaza kld_sk_… al montar; las server keys son exclusivamente server-to-server.

Cómo se aplica

  • Preflight (OPTIONS) es permisivo — refleja el origin solicitado para que el navegador continúe (la clave no se presenta en un preflight).
  • La solicitud real solo recibe un header Access-Control-Allow-Origin cuando el Origin de la solicitud está en la lista permitida de la clave. Un origin no incluido en la allowlist no recibe header ACAO, por lo que el navegador bloquea la respuesta.

No intervienen cookies — la platform API usa autenticación por bearer token, por lo que no existe Access-Control-Allow-Credentials.

Las publishable keys viajan en URLs al tile CDN

tile.kaleidr.com recibe tu publishable key como parámetro de consulta ?key=. Esto es intencionado y tiene una consecuencia importante: los query strings quedan registrados en los access logs del CDN, el historial del navegador y cualquier proxy intermedio.

Esto es aceptable porque una publishable key es pública por diseño — ya se distribuye en el código fuente de tu página. El control que la hace segura es la origin allowlist por clave, aplicada por el edge en cada tile request, además de la restricción de la clave al scope maps.

No es aceptable para una server key. Nunca pongas kld_sk_… en una URL y recuerda que una server key filtrada ya está expuesta cuando la API la rechaza.

En cualquier otro lugar — el session exchange del SDK y la platform API — la clave viaja como header, nunca como query parameter.

Consejos

  • Usa bare origins (scheme://host[:port]) — sin path ni barra final — para que coincidan exactamente con el header Origin del navegador.
  • Se requiere https excepto para localhost / 127.0.0.1 (pruebas locales).
  • Las llamadas server-to-server con una clave server (sin Origin del navegador) no están sujetas a CORS, aunque siguen autenticándose y comprobando scopes normalmente.
  • Las server keys también admiten una IP allowlist opcional — una llamada desde una IP fuera de la lista se rechaza con 403 ip_not_allowed incluso si el bearer es válido. Adminístrala en kaleidr.com/api-keys.