すべてのプロダクト
Search
ドキュメントセンター

:HTTPS経由で接続を確立する

最終更新日:Feb 06, 2024

HTTPS経由でデバイスをIoT Platformに接続できます。 このトピックでは、HTTPS経由でデバイスをIoT Platformに接続する方法について説明します。

使用法のメモと制限

  • HTTPS経由でIoT Platformにデバイスを接続するには、 中国 (上海) リージョン。
  • デバイスとIoT Platform間のHTTPSによる短期間の接続は、中国 (上海) リージョンでのみ確立できます。 デバイスがIoT Platformに接続または切断されたときに、IoT Platformコンソールで短期間のHTTPS接続を持つデバイスのステータス変更を表示できます。 Advanced Message Queuing Protocol (AMQP) サーバー側サブスクリプションを設定して、デバイスのステータス変更に関するメッセージを受信できます。
  • HTTPS経由でIoT Platformに直接接続されたデバイスのみ接続できます。 ゲートウェイまたはサブデバイスをHTTPS経由でIoT Platformに接続することはできません。
  • HTTPSによる接続は、デバイスがデータを送信するために使用されます。 デバイスは一度に最大128 KBのデータを送信できます。
  • HTTPSトピックとMQTTトピックは同じ標準を共有します。 HTTPS経由でデバイスをIoT Platformに接続する場合、デバイスとIoT Platform間の通信にMQTTトピックを使用できます。 HTTPS経由でデバイスをIoT Platformに接続すると、デバイスは ${endpoint}/topic/${topic} 形式でデータをトピックに送信します。 ? query_String=xxx形式はサポートされていません。
  • POSTリクエストメソッドのみがサポートされています。
  • デバイス認証中に返されたトークンは、指定された期間後に期限切れになります。 現在の有効期間は7日です。 期限切れのトークンを処理するロジックを指定してください。

処理中

デバイスを認証してデバイストークンを取得し、トークンを使用してデータを送信する必要があります。

  1. デバイスを認証して、デバイストークンを取得します。

    認証リクエスト:

    POST /auth HTTP/1.1
    ホスト: ${YourEndpoint}
    Content-Type: application/json
    コンテンツ-長さ: 214
    body: {"version":"default","clientId":"mylight1000002","signmethod":"hmacsha1","sign":"4870141D4067227128CBB4377906C3731CAC221C","productKey":"ZG1EvTE ****","deviceName":"NlwaSPXsCpTQuh8FxBGH","timestamp":"1501668289957"} 
    表1. 次の表にパラメーターを示します。
    パラメーター説明
    メソッドリクエスト方式。 有効値: POST。
    URLURL HTTPSのみがサポートされます。 有効値: /auth
    ホストHTTP経由でデバイスを接続するパブリックインスタンスまたはEnterprise Editionインスタンスのエンドポイント。 詳細については、「インスタンスのエンドポイントの管理」をご参照ください。
    コンテンツタイプデバイスがIoT Platformに送信するアップストリームデータのMultipurpose Internet Mail Extensions (MIME) タイプ。 有効値: application/json。 別のMIMEタイプを指定すると、エラーが発生します。
    コンテンツ長HTTPメッセージ本文の長さ。
    重要
    • HTTP/1.1以降を使用する場合、デフォルトでContent-Lengthパラメーターがリクエストに含まれます。 HTTP/1.0以前を使用している場合、このパラメーターはデフォルトではリクエストに含まれません。 HTTPプロトコルを使用してデバイスを認証する場合は、Content-Lengthパラメーターを指定する必要があります。
    • Content-Lengthの値は、メッセージ本文の長さと同じである必要があります。 それ以外の場合、メッセージ本文は解析できず、認証は失敗します。
    ボディJSON形式の認証用のデバイス情報。 詳細については、「メッセージ本文のパラメーター」をご参照ください。
    表2. メッセージ本文のパラメーター
    パラメーター必須説明
    productKey必須デバイスが属するプロダクトのProductKey。 IoT Platformコンソールにログインし、インスタンス[デバイスの詳細] ページでProductKeyを取得できます。
    deviceName必須デバイスのDeviceName。 IoT Platformコンソールにログインし、インスタンス[デバイスの詳細] ページでDeviceNameを取得できます。
    clientId必須クライアントのID。 クライアントIDの長さは1 ~ 64文字である必要があります。 clientIdパラメーターの値として、デバイスのMACアドレスまたはSNを使用することを推奨します。
    timestamp任意タイムスタンプ。 リクエストは、タイムスタンプが生成されてから15分間有効です。 タイムスタンプは数値形式で、値は1970年1月1日木曜日00:00:00から経過したミリ秒数を表します。
    サイン必須署名。

    署名は、hmacmd5(deviceSecret,content) 関数を使用して計算されます。

    contentの値は、versionsign、およびsignmethodパラメーターを除く、デバイスがIoT Platformに送信するすべてのパラメーターを含む文字列です。 送信されたパラメータはアルファベット順にソートされ、連結記号なしで連結されます。

    例:

    clientIdパラメーターが127.0.0.1に設定されている場合、deviceNameパラメーターはhttp_testに設定され、productKeyパラメーターはa1FHTWxQ **** に設定され、timestampパラメーターは1567003778853に設定され、signmethodパラメーターはhmacmd5に設定され、deviceSecretパラメーターは89VTJylyMRFuy2T3sywQGbm5Hmk1 **** に設定されます。

    hmacmd5("89VTJylyMRFuy2T3sywQGbm5Hmk1 ****","clientId127.0.0.1deviceNamehttp_testproductKeya1FHTWxQ **** timestamp1567003778853").toHexString();

    toHexString() メソッドは、バイナリ結果を形成する4ビットのバイナリ数字のセットを16進文字列に変換するために使用されます。 16進文字列は大文字と小文字を区別しません。 たとえば、10進数形式の結果を含む配列は、[60 68 -67 -7 -17 99 30 69 117 -54 -58 -58 103 -23 113 71] です。 配列は次の16進文字列に変換されます。

    signmethod任意署名アルゴリズム。 有効な値: hmacmd5およびhmacsha1。

    デフォルト値: hmacmd5。

    バージョン任意バージョン番号。 デフォルト値:default。

    レスポンス例:

    ボディ:
    {
      "code": 0,
      "message": "success",
      "info": {
        "token": "6944e5bfb92e4d4ea3918d1eda39 ****"
      }
    }
    説明
    • 返されたトークンをデバイスにキャッシュする必要があります。
    • トークンは、デバイスがIoT Platformにデータを送信するたびに必要です。 トークンの有効期限が切れた場合、デバイスを再認証して別のトークンを取得する必要があります。
    表3. エラーコード
    コードメッセージ説明
    10000common error不明なエラーが発生した場合に返されるエラーメッセージ。
    10001param error1つ以上のパラメーターが無効な場合に返されるエラーメッセージ。
    20000auth check errorデバイスの認証に失敗した場合に返されるエラーメッセージ。
    20004update session errorデバイスの更新に失敗した場合に返されるエラーメッセージ。
    40000request too manyIoT Platformが処理できるリクエストの数がスロットリングしきい値を超えた場合に返されるエラーメッセージ。
  2. データを送信します。

    デバイスは、デバイスが発行権限を持つトピックにのみデータを送信します。 カスタムトピックを使用できます。

    たとえば、トピックは /${YourProductKey}/${YourDeviceName}/pub、DeviceNameはdevice123、ProductKeyはa1GFjLP **** です。 https://iot-as-http.cn-shanghai.aliyuncs.com/topic/a1GFjLP ****/device123/pubのURLを使用してデータを送信できます。

    リクエストの例

    POST /topic/${topic} HTTP/1.1
    ホスト: ${YourEndpoint}
    password :${ token}
    Content-Type: application/octet-stream
    コンテンツ-長さ: 53
    body: ${your_data} 
    表4. パラメーター
    パラメーター説明
    メソッドリクエスト方式。 有効値: POST。
    URL/topic/${topic} です。 ${topic} 変数を、データの送信先のトピックに置き換えます。 HTTPSのみがサポートされます。
    ホストエンドポイント。
    パスワードこのパラメーターはリクエストヘッダーに含まれています。 このパラメーターを、auth操作を呼び出してデバイスを認証した後に返されるトークンに設定します。
    コンテンツタイプデバイスがIoT Platformに送信するアップストリームデータのMIMEタイプ。 有効値: application/octet-stream。 別のMIMEタイプを指定すると、エラーが発生します。
    コンテンツ長HTTPメッセージ本文の長さ。
    ボディ指定されたトピックに送信されるデータ。 データ形式の詳細については、「トピック」をご参照ください。.

    レスポンス例:

    ボディ:
    {
      "code": 0,
      "message": "success",
      "info": {
        "messageId": 892687 **** 47040
      }
    }
    表5. エラーコード
    コードメッセージ説明
    10000common error不明なエラーが発生した場合に返されるエラーメッセージ。
    10001param error1つ以上のパラメーターが無効な場合に返されるエラーメッセージ。
    20001token is expiredトークンの有効期限が切れた場合に返されるエラーメッセージ。 auth操作を呼び出して、デバイスを再認証し、新しいトークンを取得する必要があります。
    20002token is nullリクエストヘッダーにトークンが指定されていない場合に返されるエラーメッセージ。
    20003check token errorIoT Platformがトークンに基づいてデバイスID情報を取得できなかった場合に返されるエラーメッセージ。 auth操作を呼び出して、デバイスを再認証し、新しいトークンを取得する必要があります。
    30001publish message errorデバイスがデータの送信に失敗した場合に返されるエラーメッセージ。
    40000request too manyIoT Platformが処理できるリクエストの数がスロットリングしきい値を超えた場合に返されるエラーメッセージ。

サンプル値

HTTPクライアントをIoT Platformに接続する方法については、「HTTPを使用したIoT Platformへのアクセス」をご参照ください。