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

IoT Platform:MQTT ベースの動的登録

最終更新日:Mar 26, 2025

IoT Platform コンソールで動的登録を有効にすると、product ごとの一意の証明書方式を使用して直接接続されたデバイスを検証できます。このようにして、デバイスは Message Queuing Telemetry Transport(MQTT)を介して IoT Platform に接続できます。デバイスは、IoT Platform への Transport Layer Security(TLS)接続を確立して、MQTT 接続に必要な DeviceSecret を取得します。次に、デバイスは TLS 接続を閉じ、通信用の MQTT 接続を確立します。このトピックでは、動的登録プロセスについて説明します。

前提条件

Product ごとの一意の証明書検証 トピックで説明されている以下の手順を実行します。

重要

事前登録不要の product ごとの一意の証明書検証方式は、中国 (上海) リージョンでのみ使用できます。

  1. Product を作成します。

  2. 動的登録を有効にします。

  3. デバイスを追加します。

  4. デバイスにデバイス証明書をインストールします。

動的登録プロセス

流程

  1. デバイスは、接続を確立するために、動的登録パラメーターを含む CONNECT メッセージを送信します。

    説明

    動的登録は TLS 接続のみをサポートします。動的登録中、IoT Platform は MQTT 接続のキープアライブ時間を検証しません。したがって、キープアライブ時間を指定する必要はありません。

    • MQTT エンドポイント パブリックインスタンスおよび Enterprise Edition インスタンスの場合: 詳細については、「インスタンスのエンドポイントを管理する」をご参照ください。

      説明

      事前登録不要の product ごとの一意の証明書方式を使用して直接接続されたデバイスを検証する場合は、${YourRegionId}cn-shanghai に置き換えます。

    • CONNECT メッセージの動的登録パラメーター:

      • デバイスが 新しいバージョンのパブリックインスタンスまたは Enterprise Edition インスタンスに接続されている場合は、次の動的登録パラメーターを設定します。

        mqttClientId:clientId+"|securemode=-2,authType=xxxx,random=xxxx,signmethod=xxxx,instanceId=xxxx|"
        mqttUserName: deviceName+"&"+productKey
        mqttPassword:sign_hmac(productSecret,content)
      • デバイスが 古いバージョンのパブリックインスタンス に接続されている場合は、次の動的登録パラメーターを設定します。

        mqttClientId:clientId+"|securemode=2,authType=xxxx,random=xxxx,signmethod=xxxx|"
        mqttUserName: deviceName+"&"+productKey
        mqttPassword:sign_hmac(productSecret,content)
      説明

      詳細については、「IoT Platform インスタンスの概要」をご参照ください。

      パラメーター:

      • mqttClientId

        次の表に、mqttClientId パラメーターに含まれるパラメーターを示します。

        パラメーター

        説明

        clientId

        クライアントの ID。クライアント ID は 1 ~ 64 文字の長さでなければなりません。デバイスの Media Access Control(MAC)アドレスまたはシリアル番号(SN)をクライアント ID として使用することをお勧めします。

        securemode

        セキュリティのモード。有効な値:

        authType

        検証方式。返されるパラメーターは、検証方式によって異なります。有効な値:

        random

        乱数。乱数を指定できます。

        signMethod

        署名アルゴリズム。有効な値: hmacmd5、hmacsha1、および hmacsha256。

        instanceId

        IoT インスタンスの ID。IoT Platform コンソール にログインし、[概要] タブでインスタンス ID を表示できます。

      • mqttUserName

        形式: deviceName+"&"+productKey

        例: device1&al123456789

      • mqttPassword

        計算方法: sign_hmac(productSecret,content)

        content パラメーターの値は、IoT Platform に送信する必要があるパラメーターと対応する値を連結した文字列です。パラメーターには、deviceName、productKey、および random が含まれます。パラメーターはアルファベット順にソートされ、連結演算子を使用せずに連結されます。次に、content パラメーターの値は、mqttClientId パラメーターの signMethod で指定されたアルゴリズムに基づいて暗号化されます。product の ProductSecret は、アルゴリズムの秘密キーとして使用されます。

        例: hmac_sha1(h1nQFYPZS0mW****, deviceNamedevice1productKeyal123456789random123)

  2. IoT Platform は、CONNECT ACK メッセージを返します。

    • 値 0 は、動的登録が成功したことを示します。

    • その他の値は、動的登録が失敗したことを示します。ACK メッセージで返されるエラーコードに基づいて、失敗の原因を特定できます。

    次の表に、デバイスが IoT Platform に接続リクエストを送信した後に返される可能性のあるレスポンスコードを示します。

    レスポンスコード

    メッセージ

    説明

    0

    CONNECTION_ACCEPTED

    動的登録は成功しました。

    2

    IDENTIFIER_REJECTED

    パラメーターが無効です。このエラーは、次のいずれかの原因で発生する可能性があります。

    • 1 つ以上の必須パラメーターが指定されていないか、無効な形式です。

    • 登録のために直接 TCP 接続を確立しました。動的登録は TLS 接続のみをサポートします。

    3

    SERVER_UNAVAILABLE

    IoT Platform でエラーが発生しました。後でもう一度お試しください。

    4

    BAD_USERNAME_OR_PASSWORD

    動的登録に失敗しました。デバイスは検証されていません。

    mqttUserName および mqttPassword 入力パラメーターの値が有効かどうかを確認してください。

  3. 接続が確立されると、IoT Platform はデバイス証明書をプッシュするために使用される Topic を使用して検証パラメーターを返します。検証パラメーターは、CONNECT メッセージの authType パラメーターによって異なります。

    説明

    デバイスは、証明書をプッシュするために使用される Topic をサブスクライブする必要はありません。

    • 事前登録 product ごとの一意の証明書方式を使用する場合は、authType パラメーターを register に設定します。この場合、/ext/register Topic を使用して DeviceSecret が返されます。

      IoT Platform によってプッシュされるメッセージペイロードは、次の形式です。

      {
        "productKey" : "***",
        "deviceName" : "***",
        "deviceSecret" : "***"
      }
    • 事前登録不要の product ごとの一意の証明書方式を使用する場合は、authType パラメーターを regnwl に設定します。この場合、/ext/regnwl Topic を使用して ClientID と DeviceToken が返されます。

      IoT Platform によってプッシュされるメッセージペイロードは、次の形式です。

      {
        "productKey" : "***",
        "deviceName" : "***",
        "clientId" : "***",
        "deviceToken" : "***"
      }
  4. デバイスは、DeviceSecret または ClientID と DeviceToken の組み合わせを受信して保存し、現在の MQTT 接続を閉じます。

    デバイスは、DISCONNECT メッセージを送信するか、TCP 接続を閉じることで、現在の接続を閉じることができます。

    デバイスが接続を閉じない場合、IoT Platform は 15 秒後にデバイスを切断します。

    Eclipse Paho MQTT クライアントを使用する場合は、MqttConnectOptions.setAutomaticReconnect(false) 関数を使用して自動再接続を無効にします。そうしないと、登録が完了し、TCP 接続が閉じられた後、再接続ロジックに基づいて動的登録の新しいリクエストが生成されます。

  5. 事前登録 product ごとの一意の証明書方式を使用する場合は、デバイスは DeviceSecret を使用して、メッセージ通信のためにデバイスと IoT Platform 間の MQTT 接続を確立するリクエストを再発行します。事前登録不要の product ごとの一意の証明書方式を使用する場合は、デバイスは ClientID を mqttClientId に変換し、mqttClientId と DeviceToken の組み合わせを使用して MQTT 接続を確立します。詳細については、「TCP 経由で MQTT 接続を確立する」をご参照ください。

直接接続されたデバイスを動的に登録する方法の例については、「MQTT ベースの動的登録」をご参照ください。