跳到內容
主控台

API Token

API Token 是呼叫需要驗證的 ExpTech API 時使用的憑證,以 et_ 開頭。Token 在主控台建立,建立後不會過期,直到你撤銷為止。目前公開的 HTTP 資料 API 多數不需要 token;每個端點(endpoint)所在頁面的「驗證」一節會寫明是否需要。

  1. 登入 https://manager.exptech.com.tw/login(輸入電子郵件,點信中的登入連結)。
  2. 進入主控台的 API Token 頁面。
  3. 選擇這個 token 需要的權限,可以填一段備註(最多 15 個字)。
  4. 建立後畫面會顯示完整 token。Token 只會顯示這一次,請立刻存到安全的地方。之後的列表只看得到備註與權限,看不到 token 本身。
  • 格式:et_ 加上 43 個 base64url 字元(A–Z、a–z、0–9、-、_),例如 et_3q2-7wAAexampleexampleexampleexampleexample。
  • 有效期:沒有到期時間,也沒有 refresh token。只要沒被撤銷就一直有效。
  • 伺服器只保存 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.1
X-Api-Token: et_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

可以用 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 的規則見即時串流。

在主控台的 API Token 頁面刪除即可。目前沒有「拿 token 本身來撤銷」的 API。

  • HTTP:撤銷後最多約 1 分鐘內完全失效。
  • SSE:撤銷後約 5 秒,該帳號所有以 token 驗證的串流連線都會收到 event: close、data: token revoked 並被關閉,不只是用被撤銷那個 token 的連線。用其他仍有效的 token 重新連線即可。
  • 不要把 token 寫進前端程式碼、App 安裝檔或公開的 Git repository。
  • 一個用途一個 token,備註寫清楚用在哪裡。外洩時只要撤銷那一個。
  • 權限只勾需要的。*(全部權限)方便測試,但外洩時影響最大。