iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 16
0
Software Development

Kotlin 2018連續開發30天系列 第 16

# Kotlin 2018連續開發30天 day 14 串接ptx api 中集

  • 分享至 

  • xImage
  •  

今天繼續
昨天取的APP ID跟APP金鑰後
再仔細觀察他的認證流程
要走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 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 401:

Unauthorized (未帶簽章,未經授權)
APP ID及APP Key:不同層級的資料服務類型,會給予不同的ID/Key組合,例如:基礎資料服務(L1)與基礎加值服務(L2)會分別給予兩組不同的ID/Key組合詳請參考資料服務查詢中的API服務類型,目前提供的資料服務多屬L1,L2之服務目前僅有場站空氣品質服務,後續會再進行擴充。

使用程式(如:C#、Java、JavaScript等)取得資料時,請記得加入HTTP Header設定(Accept-Encoding: gzip, deflate),可有效減傳輸量。

也就是說要除了金曜之外也要把時間也帶入到headers中

所以要寫一個拿出時間的function

如以下
fun getServerTime(): String {
val calendar = Calendar.getInstance()
val dateFormat = SimpleDateFormat(
"EEE, dd MMM yyyy HH:mm:ss z", Locale.US)
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"))
return dateFormat.format(calendar.time)
}

這樣的話準備的東西應該就到齊了
明天再來一次整合應該就可以完工


上一篇
Kotlin 2018連續開發30天 day 14 串接ptx api 上集
下一篇
Kotlin 2018連續開發30天 設計模式 Android 原始碼解析
系列文
Kotlin 2018連續開發30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言