CORS et origins autorisés
Les clés Publishable (kld_pk_live_…) portent une liste allowed-origins — les
browser origins autorisés à utiliser la clé. Définissez-la lors du mint de la clé (par ex.
https://acme.com, https://app.acme.com) ; une live publishable key exige au
moins une entrée. Les clés Server (kld_sk_live_…) ne reçoivent aucune autorisation CORS, donc une page
ne peut jamais lire une réponse générée avec elles. Notez ce que cela couvre et ne couvre pas :
CORS bloque la réponse, pas la requête — une server key intégrée dans le source d’une page
est déjà exposée quoi qu’il arrive. Le SDK refuse donc
kld_sk_… au mount ; les server keys sont uniquement server-to-server.
Application
- Preflight (
OPTIONS) est permissif — il reflète l’origin demandé afin que le navigateur poursuive (la clé n’est pas présentée lors d’un preflight). - La requête réelle ne reçoit un header
Access-Control-Allow-Originque lorsque leOriginde la requête figure dans la liste autorisée de la clé. Un origin hors allowlist ne reçoit aucun header ACAO, le navigateur bloque donc la réponse.
Aucun cookie n’est impliqué — la platform API utilise l’authentification bearer-token, il n’y a donc pas de
Access-Control-Allow-Credentials.
Les publishable keys voyagent dans les URLs vers le tile CDN
tile.kaleidr.com reçoit votre publishable key comme paramètre de requête ?key=. C’est
intentionnel, avec une conséquence importante : les query strings sont
enregistrés dans les logs d’accès CDN, l’historique du navigateur et tout proxy intermédiaire.
C’est acceptable parce qu’une publishable key est publique par conception — elle
est déjà livrée dans le source de votre page. Le contrôle qui la sécurise est l’origin
allowlist par clé, appliquée par l’edge à chaque tile request, ainsi que
la restriction de la clé au scope maps.
Ce n’est pas acceptable pour une server key. Ne placez jamais kld_sk_… dans une URL et notez
qu’une server key divulguée est déjà exposée lorsque l’API la refuse.
Partout ailleurs — session exchange du SDK, platform API — la clé voyage comme header, jamais comme query parameter.
Conseils
- Utilisez des bare origins (
scheme://host[:port]) — sans path ni slash final — afin qu’ils correspondent exactement au headerOrigindu navigateur. httpsest requis sauf pourlocalhost/127.0.0.1(tests locaux).- Les appels server-to-server avec une clé server (sans browser
Origin) ne sont pas soumis à CORS, mais restent authentifiés et vérifiés par scope normalement. - Les server keys prennent également en charge une IP allowlist facultative — un appel
depuis une IP hors de la liste est rejeté avec 403
ip_not_allowed, même si le bearer est valide. Gérez-la sur kaleidr.com/api-keys.