はじめに ApsaraMQ for MQTT は、トークン認証モードで、クライアントがトークンの有効期限通知とトークン無効通知をアップロード、更新、およびリッスンする方法について説明します。
トークン認証モードでの MQTT クライアント接続のパラメーターの設定
MQTT は 3 つのトークンタイプをサポートしています。各 MQTT クライアントは、タイプごとに最大 1 つのトークンを申請でき、必要に応じて 1 つ以上のタイプを申請して使用できます。具体的なタイプを次の表に示します。
| タイプ識別子 | 説明 |
| R | 指定されたリソースに対する読み取り権限のみを持つ読み取り専用トークン。 |
| W | 書き込み専用トークンは、指定されたリソースに対する書き込み権限のみを持ちます。 |
| RW | 指定されたリソースに対する読み取りおよび書き込み権限を持つ読み取り/書き込みトークン。 |
- ユーザー名
ユーザー名パラメーターは、認証モード、AccessKeyId、および InstanceId で構成され、これらは縦棒(|)で区切られます。認証モードは、トークン認証モードではトークンです。
- 例
クライアント ID が GID_Test @ の場合、値はタイムスタンプで、accesskey ID が使用されている場合は yyyyyyy です。トークンモードでは、UserName の値を Token | YYYYY | Timestamp に設定する必要があります。
- パスワード:
MQTT クライアントが使用するトークンの内容。パラメーター値は、トークンタイプとトークンコンテンツによって順番に連結されたすべてのトークンで構成される完全な文字列であり、縦棒(|)で接続されています。異なるタイプのトークンは、特定の順序で連結されません。
例 1:MQTT クライアントが文字列形式で読み取り専用トークン 123 のみを持っている場合、Password は R | 123 に設定する必要があります。
例 2:MQTT クライアントに 2 つのトークンタイプ(読み取り専用トークンとして 123、書き込み専用トークンとして abcd)がある場合、Password は R | 123 | W | abcd に設定する必要があります。
説明 上記のルールに基づいて MQTT クライアント接続のトークンパラメーターが設定され、すべてのトークンが有効であることを確認してください。一部のトークンが無効な場合、MQTT ブローカーはトークン設定が無効であると判断する可能性があります。
クライアントのトークンを更新する
通常の場合、MQTT クライアントのトークンを更新するには、まず MQTT クライアントを切断してから、新しいトークンを使用して MQTT クライアントを接続します。トークンの更新中にクライアントの切断を回避する場合は、動的トークン更新によって MQTT ブローカーセッションのトークンデータを置き換えることができます。
動的トークン更新中に、MQTT クライアントは事前定義されたシステムトピックを使用して特別なメッセージを送信し、新しいトークンコンテンツを MQTT ブローカーに更新します。MQTT クライアントは、動的トークン更新とともにローカルのトークン構成が更新されていることを確認する必要があります。そうしないと、次回の接続初期化中に古いトークンデータが使用される可能性があります。
- トークン更新のために送信されたトピック: $SYS/uploadToken
- コンテンツ: JSONString
- コンテンツの説明:
パラメーター タイプ 説明 token String トークン認証が使用されている場合、MQTT クライアントはトークン文字列をアップロードする必要があります。 type String トークンタイプ。W、R、または RW で、3 つの権限タイプに対応します。MQTT クライアントは最大 3 つのタイプのトークンを持つことができます。トークンタイプが正しくない場合、権限検証エラーが発生する可能性があります。 - レスポンスパラメーター
一般的な PubAck メッセージが返されます。MQTT クライアントは、パブリッシュまたはサブスクライブ操作を実行する前に、レスポンスを待つ必要があります。そうしないと、MQTT ブローカーは認証に古いトークンデータを使用し続け、認証エラーと切断が発生する可能性があります。
トークンの有効期限が近づいているという通知をリッスンする(サブスクリプションは不要)
サービスのデバッグと監視を容易にするために、MQTT ブローカーはシステムトピックを使用して MQTT クライアントに通知をプッシュし、まもなく期限切れになるトークンをクライアントに通知します。MQTT クライアントは、このような通知をリッスンして、トークンが期限切れになるかどうかを検出できます。
- 受信トピック: $SYS/tokenExpireNotice
- コンテンツ: JSONString
- コンテンツの説明:
パラメーター タイプ 説明 expireTime Long トークンの有効期限。タイムスタンプ形式で、ミリ秒単位の精度です。MQTT クライアントは通常、5 分前にトークンの有効期限が通知されます。ただし、MQTT ブローカーは常に通知が送信されることを保証するものではありません。 type String トークンタイプ。W、R、または RW で、クライアントによってアップロードされた 3 つの権限タイプに対応します。 - レスポンス
トークンの有効期限が近づいているという通知を受信した後、MQTT クライアントはメッセージの送信失敗を回避するためにできるだけ早く新しいトークンを申請する必要があります。
無効なトークンに関する通知をリッスンする(サブスクリプションは不要)
サービスのデバッグと監視を容易にするために、MQTT ブローカーはシステムトピックを使用して MQTT クライアントに通知をプッシュし、トークン認証エラーをクライアントに通知します。MQTT クライアントは、このような通知をリッスンして、トークンの不一致やその他の権限エラーを検出できます。
受信トピック: $SYS/tokenInvalidNotice
コンテンツ: JSONString
- コンテンツの説明:
パラメーター タイプ 説明 code int トークン検証エラーのタイプ。 type String トークンタイプ。W、R、または RW で、クライアントによってアップロードされた 3 つの権限タイプに対応します。 - レスポンス:
MQTT ブローカーがトークン検証エラーを検出した場合、認証に失敗し、MQTT ブローカーは MQTT クライアントを積極的に切断します。MQTT ブローカーは、MQTT クライアントを切断する前に、エラーコードを MQTT クライアントにプッシュします。MQTT クライアントは、エラーコードに基づいて原因を特定できます。
タイプコード エラールタイプ 1 トークンを偽造するために使用されたトークン。解析できません。 2 トークンが期限切れです。 3 トークンが失効しました。 4 リソースとトークンが一致しないために返されたエラーメッセージ。 5 権限タイプとトークンが一致しません。 8 署名が無効です。 -1 アカウント権限が無効です。