CORS & erlaubte Origins
Publishable Keys (kld_pk_live_…) tragen eine Allowed-Origins-Liste — die
Browser-Origins, die den Schlüssel verwenden dürfen. Lege sie beim Mint des Schlüssels fest (z. B.
https://acme.com, https://app.acme.com); ein Live-Publishable-Key benötigt mindestens
einen Eintrag. Server Keys (kld_sk_live_…) erhalten keine CORS-Freigabe, sodass eine Seite
eine damit erzeugte Response niemals lesen kann. Wichtig ist, was das abdeckt und was nicht:
CORS blockiert die Response, nicht die Anfrage — ein Server Key im Seitenquelltext
ist unabhängig davon bereits offengelegt. Das SDK lehnt daher
kld_sk_… beim Mounten ab; Server Keys sind ausschließlich für Server-zu-Server.
Durchsetzung
- Preflight (
OPTIONS) ist permissiv — der angeforderte Origin wird gespiegelt, damit der Browser fortfährt (der Schlüssel wird bei einem Preflight nicht mitgesendet). - Die eigentliche Anfrage erhält nur dann einen
Access-Control-Allow-Origin-Header, wenn der Request-Originin der Allowed-Liste des Schlüssels steht. Ein nicht zugelassener Origin erhält keinen ACAO-Header, sodass der Browser die Response blockiert.
Es werden keine Cookies verwendet — die Platform API nutzt Bearer-Token-Authentifizierung, daher gibt es kein
Access-Control-Allow-Credentials.
Publishable Keys reisen in URLs zum Tile-CDN
tile.kaleidr.com nimmt deinen Publishable Key als ?key=-Query-Parameter entgegen. Das
ist beabsichtigt und hat eine wichtige Konsequenz: Query Strings werden
in CDN-Zugriffslogs, Browser-Historie und jedem Proxy dazwischen aufgezeichnet.
Das ist akzeptabel, weil ein Publishable Key konstruktionsbedingt öffentlich ist — er
wird ohnehin in deinem Seitenquelltext ausgeliefert. Die Sicherheitskontrolle ist die
Origin-Allowlist pro Schlüssel, die am Edge für jede Tile-Anfrage durchgesetzt wird, plus
die Beschränkung des Schlüssels auf den maps-Scope.
Für einen Server Key ist das nicht akzeptabel. Setze niemals kld_sk_… in eine URL und beachte,
dass ein geleakter Server Key bereits offengelegt ist, bevor die API ihn ablehnt.
Überall sonst — SDK-Session-Exchange, Platform API — reist der Schlüssel als Header, niemals als Query-Parameter.
Tipps
- Verwende Bare Origins (
scheme://host[:port]) — keinen Pfad, keinen abschließenden Slash — damit sie exakt mit demOrigin-Header des Browsers übereinstimmen. httpsist erforderlich, außer fürlocalhost/127.0.0.1(lokale Tests).- Server-zu-Server-Aufrufe mit einem Server Key (ohne Browser-
Origin) sind nicht CORS-beschränkt, werden aber weiterhin normal authentifiziert und auf Scopes geprüft. - Server Keys unterstützen zusätzlich optional eine IP-Allowlist — ein Aufruf
von einer IP außerhalb der Liste wird mit 403
ip_not_allowedabgelehnt, selbst wenn der Bearer gültig ist. Verwalte sie unter kaleidr.com/api-keys.