各デバイスが ApsaraMQ for MQTT に接続するには、一意のデバイスアクセス認証情報 (ClientId、DeviceAccessKeyId、および DeviceAccessKeySecret) が必要です。デバイスはこの認証情報を使用して Username と Password を設定し、認証リクエストを ApsaraMQ for MQTT に送信します。ApsaraMQ for MQTT はデバイスを認証してアクティベートし、ApsaraMQ for MQTT とのデータ転送を可能にします。
用語集
|
用語 |
説明 |
|
デバイスアクセス認証情報 |
ApsaraMQ for MQTT サーバーがクライアントに発行する、クライアント ID にバインドされたグローバルに一意な認証情報です。これは |
|
アプリケーションサーバー |
ローカルアカウントを管理し、クライアントのデバイスアクセス認証情報リクエストを処理する、お客様のサーバーです。 |
|
ApsaraMQ for MQTT サーバー |
認証を処理し、アプリケーションサーバーからの認証情報リクエストを処理し、メッセージトラフィックを管理する ApsaraMQ for MQTT サーバーです。 |
計算方法
「認証の概要」で説明されているように、MQTT サーバーに接続する際、connect メッセージにユーザー名とパスワードを設定します:
-
Username
Usernameは、パイプ (|) で区切られた 3 つの部分 (認証モード、DeviceAccessKeyId、インスタンス ID) から構成されます。モードを DeviceCredential に設定します。例:クライアント ID が
GID_Test@@@0001、インスタンス ID がmqtt-xxxxx、DeviceAccessKeyIdがYYYYYの場合、Usernameは DeviceCredential|YYYYY|mqtt-xxxxx となります。クライアント ID の形式は、用語集で定義されています。
-
Password
Passwordは、DeviceAccessKeySecretをキーとして使用し、クライアント ID を HMAC-SHA1 で署名し、Base64 でエンコードしたものです。例:クライアント ID が
GID_Test@@@0001で、DeviceAccessKeySecretがXXXXXの場合:キー
XXXXXを使用してGID_Test@@@0001を HMAC-SHA1 で署名してバイナリ配列を生成し、それを Base64 でエンコードしてPasswordを取得します。ほとんどのプログラミング言語には HMAC-SHA1 ライブラリが含まれています。
認証フロー
次の図に示すように、アプリケーションサーバーをデプロイします。初期化中に、MQTT クライアントはアプリケーションサーバーと対話し、デバイスアクセス認証情報を取得および更新します。
図 1: 認証フロー
プロセスは次のとおりです。
-
お客様のアプリケーションサーバーが OpenAPI を呼び出し、クライアントのために MQTT サーバーからデバイスアクセス認証情報を事前にリクエストします。
-
MQTT サーバーはリクエストを検証します。リクエストが有効な場合、サーバーはデバイスアクセス認証情報を発行します。
-
アプリケーションサーバーは認証情報をローカルにキャッシュし、クライアントにマッピングします。キャッシュの利点:
-
クライアント側で認証情報の漏洩などの問題がない限り、キャッシュされた認証情報を直接返すことができ、追加の API 呼び出しを回避できます。
-
クライアントが再度デバイスアクセス認証情報をリクエストし、MQTT サーバーが利用できない場合、アプリケーションサーバーはディザスタリカバリのためにキャッシュされた認証情報を返すことができます。
-
-
お客様のアプリケーションサーバーが MQTT クライアントに認証情報を送信します。
-
MQTT クライアントは認証情報を使用して接続パラメーターを設定し、MQTT サーバーに接続します。検証が成功すると、クライアントはメッセージを送受信できます。
使用制限
インスタンス仕様の制約
-
認証情報クォータは、インスタンス仕様の接続数上限と等しくなります。クォータに達した場合は、インスタンスをアップグレードして容量を増やします。詳細については、「インスタンスの更新、アップグレード、またはダウングレード」をご参照ください。
-
UnRegisterDeviceCredential API を呼び出して、未使用のデバイスの認証情報を登録解除し、クォータを解放してください。
クライアントの動作に関する制約
-
接続ごとに、デバイスアクセス認証情報を使用して
UsernameとPasswordを設定してください。 -
アプリケーションサーバーから取得した認証情報を永続ストレージに保存して、繰り返しのリクエストを避け、大量の再接続時におけるアプリケーションサーバーの負荷を軽減してください。
アプリケーションサーバーの動作に関する制約
-
重複リクエストを防ぐために、認証情報とクライアント間のマッピングを管理してください。
-
MQTT サーバーが一時的に利用できない場合でもサービスを維持するために、ローカルでのディザスタリカバリを実装してください。
関連 API オペレーション
お客様のアプリケーションサーバーは、HTTPS 経由で ApsaraMQ for MQTT の OpenAPI を呼び出すことによって、デバイスアクセス認証情報を管理します。
各オペレーションには、アイデンティティ検証のための AccessKey とリクエスト署名が必要です。認証情報の登録、クエリ、登録解除、更新が可能です。詳細については、「デバイスごとの個別証明書認証のためのアプリケーションサーバー API オペレーション」をご参照ください。