CORS e origins permitidas
Chaves Publishable (kld_pk_live_…) possuem uma lista allowed-origins — os
browser origins autorizados a usar a chave. Defina-a ao criar a chave (por exemplo,
https://acme.com, https://app.acme.com); uma live publishable key requer pelo
menos uma. Chaves Server (kld_sk_live_…) não recebem permissão CORS, portanto uma página
nunca pode ler uma resposta feita com uma delas. Observe o que isso cobre e o que não cobre:
CORS bloqueia a resposta, não a solicitação — uma server key embutida no código
fonte já foi exposta independentemente disso. Por isso o SDK rejeita
kld_sk_… no mount; server keys são apenas server-to-server.
Como é aplicado
- Preflight (
OPTIONS) é permissivo — ele reflete a origin solicitada para que o navegador prossiga (a chave não é apresentada em um preflight). - A solicitação real só recebe um header
Access-Control-Allow-Originquando oOriginda solicitação está na lista permitida da chave. Uma origin fora da allowlist não recebe header ACAO, portanto o navegador bloqueia a resposta.
Não há cookies envolvidos — a platform API usa autenticação bearer-token, portanto não existe
Access-Control-Allow-Credentials.
Publishable keys viajam em URLs para o tile CDN
tile.kaleidr.com recebe sua publishable key como query parameter ?key=. Isso
é intencional e tem uma consequência importante: query strings são
registrados nos access logs do CDN, no histórico do navegador e em qualquer proxy intermediário.
Isso é aceitável porque uma publishable key é pública por construção — ela
já é enviada no código-fonte da sua página. O controle que a torna segura é a
origin allowlist por chave, aplicada pelo edge em cada tile request, além da
restrição da chave ao scope maps.
Isso não é aceitável para uma server key. Nunca coloque kld_sk_… em uma URL e observe
que uma server key vazada já está exposta quando a API a recusa.
Em todos os outros lugares — SDK session exchange, platform API — a chave viaja como header, nunca como query parameter.
Dicas
- Use bare origins (
scheme://host[:port]) — sem path e sem barra final — para corresponder exatamente ao headerOrigindo navegador. httpsé obrigatório, exceto paralocalhost/127.0.0.1(testes locais).- Chamadas server-to-server com uma chave server (sem browser
Origin) não são limitadas por CORS, mas continuam autenticando e verificando scopes normalmente. - Server keys também aceitam uma IP allowlist opcional — uma chamada
de um IP fora da lista é rejeitada com 403
ip_not_allowed, mesmo quando o bearer é válido. Gerencie em kaleidr.com/api-keys.