驗證授權機制

API驗證授權說明

本平台導入API Management方案,採HMAC認證授權機制。

HMAC機制

以HMAC簽章驗證使用者的身份,用戶在請求API服務時,將APPKEY與當下時間做HMAC-SHA256運算後,轉成Base64格式,帶入signature屬性欄位,服務器端將驗證用戶請求時的header欄位,驗證使用者的身份及請求服務的時效性。

HMAC簽章時效性

Swagger頁面測試時,請在最上方輸入APPID與APPKEY,每次請求下方API時,會於header帶入Authorization和x-date,依照請求當下的時間及APPKEY製作簽章。

  • 當下時間為GMT時間

  • 簽章時效性為5分鐘

Header參數

API驗證授權使用範例

POSTMAN

可搭配Swagger頁面使用,自動產出Authorization,帶入Header設定。

以下為使用Swagger頁面取用API時,Curl所帶出的內容,將Authorization內容(粗體字部分)、x-date內容(粗體字部分)分別帶入POSTMAN的Header中,如下圖。

curl -X GET --header 'Accept: application/json' --header 'Authorization: hmac username="FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", algorithm="hmac-sha256", headers="x-date", signature="40EN7Ec/rw3xL3Y0x5ZS2TPNZkE="' --header 'x-date: Fri, 09 Jul 2021 16:09:29 GMT' --header 'Accept-Encoding: gzip' --compressed 'https://parksim.moeaidb.gov.tw/apim/v2/Agency?$top=30&$format=JSON'

SAMPLE CODE

export const IndustrialParkAPi = Vue.axios
  .get(`https://parksim.bip.gov.tw/apim/v2/IndustrialPark?$format=JSON`, {
    headers: requestHelper.setAuthorizationHeader(),
  })
  .catch(requestHelper.handleError);

setAuthorizationHeader() {
        const AppID = "";
        const AppKey = "";

        const GMTString = new Date().toGMTString();
        const ShaObj = new jsSHA256("SHA-256", "TEXT");
        ShaObj.setHMACKey(AppKey, "TEXT");
        ShaObj.update("x-date: " + GMTString);
        const HMAC = ShaObj.getHMAC("B64");
        const Authorization =
            'hmac username="' +
            AppID +
            '", algorithm="hmac-sha256", headers="x-date", signature="' +
            HMAC +
            '"';
        return {
            Authorization: Authorization,
            "X-Date": GMTString
        };
    }

Last updated