身分驗證與權限範圍
每次調用 Kaleidr 平台 API 都必須攜帶一種憑證。憑證分為三種,API 對它們的處理方式各不相同:
- 可公開使用的金鑰用於在瀏覽器中標識您的組織。它不能直接調用 API,必須先交換為工作階段。
- 工作階段權杖是瀏覽器實際調用 API 時使用的憑證。它有效期限較短,並綁定到一個網站來源和一種產品。
- 伺服器金鑰是由您的後端在每次要求中直接發送的機密憑證。
本文介紹每種憑證的發送方式、工作階段交換過程、各個權限範圍開放的功能、vendor 權限範圍的授予方法,以及每種身分驗證錯誤的原因和解決辦法。如果您想瞭解憑證洩露後可能帶來的影響,請參閱安全模型。
憑證類型
| 憑證 | 前綴 | 存放位置 | 使用方式 | 方案 |
|---|---|---|---|---|
| 可公開使用的金鑰 | kld_pk_live_… | 頁面原始碼 | 向工作階段交換接口發送一次;其他所有端點均拒絕該金鑰 | Free、Pro、Enterprise |
| 工作階段權杖 | kld_sess_live_… | 瀏覽器內存 | 從頒發權杖的頁面發起每次運行時調用時發送 | 由可公開使用的金鑰或已發佈地圖生成 |
| 伺服器金鑰 | kld_sk_live_… | 僅存放在您的後端 | 每次運行時調用均發送;如果要求攜帶 Origin 標頭,則會被拒絕 | Pro、Enterprise |
| 舊版金鑰 | kld_live_… | 您的後端 | 與伺服器金鑰一樣,可直接作為憑證使用。輪替後會生成伺服器金鑰 | 僅限現有金鑰 |
使用金鑰管理 API 並設定 environment: "test" 創建的金鑰,會以 test 代替 live(kld_pk_test_…、kld_sk_test_…)。測試金鑰無法載入底圖圖磚。
金鑰僅在創建或輪替時完整顯示一次。Kaleidr 只存儲雜湊值,因此無法恢復丟失的金鑰;請輪替金鑰。
傳送憑證
可以透過任意一個標頭髮送憑證。所有端點均接受這兩種標頭。
Authorization: Bearer kld_sk_live_…
X-Api-Key: kld_sk_live_…
如果要求同時攜帶兩者,且 Authorization 的值以 Kaleidr 前綴開頭, 則優先使用它;否則讀取 X-Api-Key。切勿把伺服器金鑰放入 URL。
各類憑證在運行時端點(工作階段交換端點除外)上的行為如下:
| 憑證 | 運行時端點的處理結果 |
|---|---|
| 可公開使用的金鑰 | 401 publishable_requires_session。必須先交換為工作階段。 |
沒有 Origin 標頭的伺服器金鑰 | 接受金鑰,然後檢查 IP 允許清單、權限範圍、允許的產品、額度和速率限制。 |
帶有 Origin 標頭的伺服器金鑰 | 403 server_key_in_browser。瀏覽器在跨網站要求時會添加 Origin,API 因而能夠識別網頁中使用的伺服器金鑰。 |
| 來自權杖頒發來源的工作階段權杖 | 接受。 |
帶有不同 Origin 的工作階段權杖 | 403 session_origin_mismatch。 |
不帶 Origin 的已發佈地圖工作階段權杖 | 403 session_origin_mismatch。 |
JavaScript SDK 會更早實施同一規則:Kaleidr.mount 在瀏覽器中發現 kld_sk_… 金鑰時,不會發起要求,而是直接拒絕。
工作階段交換
可公開使用的金鑰需要透過一個端點換取工作階段權杖。SDK 在每次使用金鑰掛載元件時自動完成交換,並負責刷新權杖。只有在自行構建瀏覽器使用者端時,您才需要直接調用此端點。
POST https://api.kaleidr.com/inference-api/b2b/v1/sdk/sessions
X-Api-Key: kld_pk_live_…
Content-Type: application/json
{ "product": "chat" }
必須提供 product,其值只能是 chat、editor、viewer 或 tile。要求必須帶有 Origin 標頭;瀏覽器會自動添加。
{
"session_token": "kld_sess_live_eyJhbGciOi…",
"expires_in": 900,
"product": "chat",
"basemap_style_id": null
}
| 欄位 | 含義 |
|---|---|
session_token | 運行時調用使用的憑證,格式為 kld_sess_{env}_{token}。 |
expires_in | 有效期限,單位為秒。透過金鑰生成的工作階段有效期限為 900 秒。請讀取該欄位,不要在代碼中寫死數值。 |
product | 工作階段綁定的產品。 |
basemap_style_id | 組織的預設底圖;未設定時為 null。 |
工作階段的綁定條件
- 一個來源。 即交換要求的
Origin。來自其他來源的調用會被拒絕。 - 一種產品。
tile工作階段不能調用聊天端點。 - 受限的權限範圍集合。 工作階段僅包含產品所需的權限範圍:聊天使用
ai,編輯器使用design,圖磚使用maps,查看器不需要權限範圍。只有當金鑰具有vendor且方案允許(Enterprise)時,聊天工作階段才會保留vendor。任何其他產品的工作階段都不會包含這一權限範圍。
更新
使用者端無法要求更長的有效期限。應在 expires_in 到期前重新交換。SDK 會在到期前 90 秒刷新;當後台標籤頁重新變為可見,且工作階段距離到期不足 90 秒或已經到期時,也會刷新;刷新失敗後則每隔 30 秒重試。如果首次交換失敗,元件掛載就會失敗,且不會自動重試。
每次為 product: "tile" 交換工作階段,都會消耗組織額度中的一次地圖載入;其他產品交換工作階段不收費。工作階段交換具有單獨的每金鑰速率限制,與運行時調用分開計算。請參閱額度與速率限制。