安全にご利用いただくために、Webhookの送信元がCWS APIであることを、ご確認いただくことを推奨します。
送信元の検証を実施いただけるように、CWS APIでは、Webhookの送信の際に、HMAC SHA256ハッシュのhexdigestをHTTP Headerに付与しています。
ハッシュは、authenticationKeyを発行するで発行したauthenticationKeyと、Webhookで送信するHTTP Request Bodyの値により生成しています。
Webhookを受信した際に、CWS APIと同じ方法で生成したハッシュと比較することで、送信元がCWS APIであることをご検証いただけます。
Webhookを受信するFlaskアプリケーションで、送信元の検証を実施するサンプルプログラムを、以下に例示します。
import hmac
import hashlib
from flask import Flask, request, abort, jsonify
app = Flask(__name__)
@app.route('/device-event', methods=['GET', 'POST'])
def device_event():
if request.method == 'GET':
return abort(403)
key = get_authentication_key()
data = request.data.decode('utf-8')
hash = get_hmac_hash_hexdigest(key, data)
if hash != request.headers.get('X-TLPF-NOTIFICATION-KEY'):
return abort(403)
return jsonify(None)
def get_authentication_key():
return 'CWS APIが発行した authenticationKey'
def get_hmac_hash_hexdigest(key, data):
return hmac.new(
bytearray(key, "ASCII"),
bytearray(data, "ASCII"),
hashlib.sha256,
).hexdigest()
上記プログラムは一例であるため、これによる問題が発生した場合の責任は負いかねます。
通知・アクセス設定で登録した「デバイスイベント通知先URLdeviceEvent」に対して、トランザクションの結果またはデバイス状態変更を通知します。
本通知は デバイスイベントの種別によって外部通知のリクエスト内容が変わります。そのため、本通知では デバイスイベント毎に表記しています。
CWSでは、端末がオンラインになった際、特定の条件を満たすトランザクションを再送します。 詳しくは トランザクション仕様 を参照してください。
通知・アクセス設定で登録した「Soraイベント送信先URLsoraEvent」に対して Sora イベントを通知します。
本通知は Sora イベントの種別によって外部通知のリクエスト内容が変わります。
トランザクションの結果を通知します。
デバイスで以下処理完了後に通知します
| X-TLPF-NOTIFICATION-KEY | string 署名検証のハッシュ値(payloadとauthenticationKeyのHMAC-SHA256) |
| applicationId required | string アプリケーションID |
| deviceId required | string THINKLETのIMEI NO |
| transactionId required | integer トランザクションID |
| operationId required | string トランザクション結果通知の種別となるオペレーションID。 オペレーションIDは、トランザクションを発行したCWS APIのAPI操作に応じて異なる値となっている。 APIとoperationIdの値の組み合わせは以下である。
|
| notificationType required | string 通知種別
|
| result required | string トランザクション結果(success:成功, failure:失敗) |
| message required | string ト ランザクションの処理結果メッセージ |
| timestamp required | string イベント発生時のタイムスタンプ |
{- "applicationId": "abcdefghigklmnopqrstuvwxyz012345",
- "deviceId": "123456789101234",
- "transactionId": 1,
- "operationId": "post-v1-applications-devices",
- "notificationType": "processed",
- "result": "success",
- "message": "",
- "timestamp": "2020-10-16T00:37:08.260Z"
}トランザクションの結果(ソフトウェア/ファームウェアのアップデート)を通知する。
| X-TLPF-NOTIFICATION-KEY | string 署名検証のハッシュ値(payloadとauthenticationKeyのHMAC-SHA256) |
| applicationId required | string アプリケーションID |
| deviceId required | string THINKLETのIMEI NO |
| transactionId required | integer トランザクションID |
| operationId required | string |