メインコンテンツまでスキップ

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-Origin header が返されます。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 originscheme://host[:port])を使用してください — path、trailing slash なし — browser の Origin header と完全一致する必要があります。
  • 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 で管理してください。