為確保 Webhooks Request 是由 Life+ Platform 送出,在使用 Webhooks Service 時,請對「X-ND-Signature」request header 中的 Signature進行驗證。
關於 Signature 驗證,請參考下列說明。
-
請使用 Provider 的「Secret」資訊作為密鑰(key)。Provider「Secret」資訊可在 IoE Suite Developer 的「Provider」選單中取得。
-
請使用 HMAC-SHA256 演算法,取得 Request Body 的雜湊值。
-
請使用 Base64 編碼對雜湊值解碼,並確認其是否與「X-ND-Signature」request header 中的 Signature 匹配。
關於 Signature 驗證實作,可參考下列 Kotlin Sample Code:
fun hashBase64(key: String, data: String): String {
val keySpec = SecretKeySpec(key.toByteArray(Charsets.UTF_8), "HmacSHA256")
val mac = Mac.getInstance("HmacSHA256")
mac.init(keySpec)
val hmac = mac.doFinal(data.toByteArray(Charsets.UTF_8))
return Base64.getEncoder().encodeToString(hmac)
}
【參考範例】
若使用以下資訊進行 Signature 驗證,將取得「w29dns/xGCkS6p/BFsWyJvaW5niWgM2PtkhOmelFjyU=」資訊。
-
開發商密碼:29b5220ce1419483ef74f1f52c031276
-
Request body:如下
{"serviceId": "3e0f29c4-9a14-4767-8e24-c300d4179ee9", "type": "activate","timestamp": 1597571810000,"userId": "a3d11d8c-9617-4641-b455-a5cfa37d4e40","params": {"gatewayUuid": "gateway-uuid","deviceUuid": "device-uuid","gatewayName": "test-gateway","deviceName": "test-deviceName"}}