授權驗證
- 說明:本平臺原採用ticket認證授權機制,後配合API Management解決方案的導入,改採HMAC認證授權機制。
- HMAC機制:以HMAC簽章驗證使用者的身份,用戶在請求API服務時,將APP Key 與當下時間(格式請使用GMT時間)做HMAC-SHA1 運算後轉成Base64 格式,帶入signature屬性欄位,服務器端將驗證用戶請求時的header欄位(詳如第四點),驗證使用者的身份及請求服務的時效性。
- HMAC Signature簽章時效性:於MOTC Helper 該網頁測試時,請在最上方輸入 API Key 與 API ID (請再次確認是否有把APP Key跟ID填寫正確,若欄位資訊相反會無法執行)。 點選Explore ,每次請求下方API時,會於header 帶入Authorization 及 x-date ,依照請求當下的時間 & API Key 製作簽章。
參數如下:
Key | Value |
---|---|
Authorization | hmac username="APP ID", algorithm="hmac-sha1", headers="x-date", signature="Base64(HMAC-SHA1("x-date: " + x-date , APP Key))" |
x-date | Wed, 19 Apr 2017 08:37:50 GMT |
※建議於每次請求API服務當下建立新的signature ,簽章時效性為5分鐘。
- HMAC認證失效樣態:依照存取API 的HTTP header資訊判別用戶是否為授權身份,若未符合身份驗證將以下列訊息回應用戶端。
- HTTP Status Code 401:
- Unauthorized (未帶簽章,未經授權)
- HTTP Status Code 403:
- HMAC signature cannot be verified, a valid date or x-date header is required for HMAC Authentication(x-date的間隔時間超過定義的clock skew秒數)
- HMAC signature does not match(日期格式正確,但簽章演算法有問題)
- HTTP Status Code 416:
- 超過最大平行連接數(限制每個IP只能發起60個連接)
- HTTP Status Code 423:
- 超過單位時間(50 request/秒)能平行的請求數
- HTTP Status Code 429:
- API rate limit exceeded (超過當日呼叫上限次數)
- APP ID及APP Key:不同層級的資料服務類型,會給予不同的ID/Key組合,例如:基礎資料服務(L1)與基礎加值服務(L2)會分別給予兩組不同的ID/Key組合詳請參考資料服務查詢中的API服務類型,目前提供的資料服務多屬L1,L2之服務目前僅有場站空氣品質服務,後續會再進行擴充。
- 使用程式(如:C#、Java、JavaScript等)取得資料時,請記得加入HTTP Header設定(Accept-Encoding: gzip, deflate),可有效減傳輸量。