API Token
API Token 是呼叫需要驗證的 ExpTech API 時使用的憑證,以 et_ 開頭。Token 在主控台建立,建立後不會過期,直到你撤銷為止。目前公開的 HTTP 資料 API 多數不需要 token;每個端點(endpoint)所在頁面的「驗證」一節會寫明是否需要。
建立 Token
Section titled “建立 Token”- 登入 https://manager.exptech.com.tw/login(輸入電子郵件,點信中的登入連結)。
- 進入主控台的 API Token 頁面。
- 選擇這個 token 需要的權限,可以填一段備註(最多 15 個字)。
- 建立後畫面會顯示完整 token。Token 只會顯示這一次,請立刻存到安全的地方。之後的列表只看得到備註與權限,看不到 token 本身。
Token 格式與有效期
Section titled “Token 格式與有效期”- 格式:
et_加上 43 個 base64url 字元(A–Z、a–z、0–9、-、_),例如et_3q2-7wAAexampleexampleexampleexampleexample。 - 有效期:沒有到期時間,也沒有 refresh token。只要沒被撤銷就一直有效。
- 伺服器只保存 token 的雜湊值,遺失後無法找回,只能建立新的。
帶 Token 的方式
Section titled “帶 Token 的方式”不同傳輸方式讀 token 的位置不同,放錯位置會被當成沒帶。
| 用途 | 帶法 | 說明 |
|---|---|---|
| HTTP API(頁面標示需要 token 的端點) | header X-Api-Token: <token> |
只讀這個 header。放在 query 或 Authorization 都會得到 401 |
| SSE 即時串流 | header Authorization: Bearer <token>,或 query token=<token> |
兩者都有時以 header 為準。Bearer 大小寫要一致,後面接一個空白 |
| OAuth2 使用者資訊 | header Authorization: Bearer <token> |
GET /api/... HTTP/1.1X-Api-Token: et_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxSSE 串流
Section titled “SSE 串流”可以用 header 的用戶端(伺服器、App、curl)請用 header:
curl -N -H "Authorization: Bearer et_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ "https://api.lb.exptech.dev/api/v1/trem/sse/report"瀏覽器的 EventSource 不能自訂 header,只能放在 query:
const token = "et_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";const es = new EventSource( `https://api.lb.exptech.dev/api/v1/trem/sse/report?token=${encodeURIComponent(token)}`,);串流有些 topic 是公開的,不帶 token 也能連;帶了 token 時,用量會計入該帳號。帶了無效或已撤銷的 token,整條連線會被拒絕(HTTP 401,內容 invalid token),公開 topic 也一樣。需要權限的 topic 除了 token 要有對應權限,帳號也要已經訂閱該資源。各 topic 的規則見即時串流。
撤銷 Token
Section titled “撤銷 Token”在主控台的 API Token 頁面刪除即可。目前沒有「拿 token 本身來撤銷」的 API。
- HTTP:撤銷後最多約 1 分鐘內完全失效。
- SSE:撤銷後約 5 秒,該帳號所有以 token 驗證的串流連線都會收到
event: close、data: token revoked並被關閉,不只是用被撤銷那個 token 的連線。用其他仍有效的 token 重新連線即可。
- 不要把 token 寫進前端程式碼、App 安裝檔或公開的 Git repository。
- 一個用途一個 token,備註寫清楚用在哪裡。外洩時只要撤銷那一個。
- 權限只勾需要的。
*(全部權限)方便測試,但外洩時影響最大。
