CORS と許可された origin
Publishable key(kld_pk_live_…)は allowed-origins list を持ちます —
key の使用を許可された browser origin です。key を mint するときに設定してください(例:
https://acme.com, https://app.acme.com)。live publishable key には少なくとも
1つ必要です。Server key(kld_sk_live_…)には CORS grant が付かないため、page は
それを使った response を読むことができません。ただし対象範囲に注意してください。
CORS が block するのは response であり request ではありません — page source に埋め込まれた server key は
すでに露出しています。そのため SDK は mount 時に
kld_sk_… を拒否します。server key は server-to-server 専用です。
適用方法
- Preflight (
OPTIONS) は permissive です — requested origin を反映し、 browser が先に進めるようにします(preflight では key は送信されません)。 - 実際の request では、request
Originが key の allowed list に含まれる場合のみAccess-Control-Allow-Originheader が返されます。allowlist にない origin には ACAO header が返らず、browser が response を block します。
Cookie は使用しません — platform API は bearer-token auth のため
Access-Control-Allow-Credentials はありません。
Publishable key は URL 内で tile CDN に送られる
tile.kaleidr.com は publishable key を ?key= query parameter として受け取ります。
これは意図された設計で、重要な結果があります。query string は
CDN access log、browser history、中間 proxy に記録されます。
これは publishable key は設計上 public だから 問題ありません —
すでに page source に含まれます。安全性を担保するのは
key ごとの origin allowlist(すべての tile request で edge が強制)と、
key が maps scope に限定されていることです。
server key では許容されません。kld_sk_… を URL に入れないでください。
また server key は API に拒否される時点ですでに漏洩しています。
それ以外 — SDK session exchange、platform API — では key は header として送られ、query parameter にはなりません。
ヒント
- bare origin(
scheme://host[:port])を使用してください — path、trailing slash なし — browser のOriginheader と完全一致する必要があります。 httpsは必須です。ただしlocalhost/127.0.0.1(local testing)は例外です。- server key を使う server-to-server call(browser
Originなし)は CORS-gated ではありませんが、通常どおり auth + scope check は行われます。 - Server key は optional な IP allowlist もサポートします — list 外の IP からの call は
bearer が有効でも 403
ip_not_allowedで拒否されます。 kaleidr.com/api-keys で管理してください。