Webhook Signature 驗證

為確保 Webhooks Request 是由 Life+ Platform 送出,在使用 Webhooks Service 時,請對「X-ND-Signature」request header 中的 Signature進行驗證。
關於 Signature 驗證,請參考下列說明。

  1. 請使用 Provider 的「Secret」資訊作為密鑰(key)。Provider「Secret」資訊可在 IoE Suite Developer 的「Provider」選單中取得。

  2. 請使用 HMAC-SHA256 演算法,取得 Request Body 的雜湊值。

  3. 請使用 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"}}