Aller au contenu principal

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-Origin que lorsque le Origin de 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 header Origin du navigateur.
  • https est requis sauf pour localhost / 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.