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

ApsaraMQ for MQTT:トークンベース認証のクライアント操作

最終更新日:Mar 12, 2026

ApsaraMQ for MQTT は、トークンベースの認証をサポートしており、メッセージングリソースへのクライアントアクセスを制御します。このトピックでは、トークンを使用した接続パラメーターの設定方法、切断せずにトークンを更新する方法、およびトークンの有効期限切れと無効化通知の処理方法について説明します。

認証フロー

トークンベースの認証は、次のシーケンスに従います:

  1. アプリケーションが ApsaraMQ for MQTT のトークンサービスにトークンをリクエストし、リソースと権限タイプ (読み取り、書き込み、またはその両方) を指定します。

  2. MQTT クライアントは、CONNECT パケットの Username および Password フィールドにトークンデータを含めてブローカーに接続します。

  3. ブローカーはトークンを検証し、指定されたリソースへのアクセスを許可します。

  4. セッション中、クライアントはシステムトピックにパブリッシュすることでトークンを更新でき、ブローカーはトークンの有効期限切れまたは無効化に関する通知をプッシュします。

トークンタイプ

各 ApsaraMQ for MQTT クライアントは、タイプごとに 1 つのトークンを保持でき、同時に 1 つ以上のタイプを使用できます。

タイプ識別子権限説明
R読み取り専用指定されたリソースに対する読み取り権限を付与します
W書き込み専用指定されたリソースに対する書き込み権限を付与します
RW読み取り/書き込み指定されたリソースに対する読み取りと書き込みの両方の権限を付与します

接続パラメーター

トークンベースの認証で接続するには、MQTT CONNECT パケットの Username および Password フィールドを次のように設定します。

Username

フォーマット: Token|<AccessKey ID>|<Instance ID>

コンポーネント説明
Tokenリテラル文字列 Token。トークンベースの認証モードを示します
<AccessKey ID>ご利用の Alibaba Cloud AccessKey ID
<Instance ID>ご利用の ApsaraMQ for MQTT インスタンス ID

例:

クライアント ID GID_Test@@@0001、インスタンス ID mqtt-xxxxx、および AccessKey ID YYYYY のクライアントの場合:

Token|YYYYY|mqtt-xxxxx

Password

フォーマット: トークンのタイプと内容のペアを縦棒 (|) で連結します。複数のトークンタイプを任意の順序で指定できます。

例:

  • 単一トークン: クライアントが読み取り専用トークン 123 を保持している場合、Password を次のように設定します:

      R|123
  • 複数トークン: クライアントが読み取り専用トークン 123 と書き込み専用トークン abcd を保持している場合、Password を次のように設定します:

      R|123|W|abcd
重要

Password フィールド内のすべてのトークンは有効である必要があります。いずれかのトークンが無効な場合、ブローカーは接続を拒否することがあります。

切断せずにトークンを更新

デフォルトでは、トークンをローテーションするには、クライアントを切断し、新しいトークンで再接続する必要があります。切断を避けるには、トークン更新メッセージをシステムトピック $SYS/uploadToken にパブリッシュします。ブローカーは接続を切断せずに、セッション内のトークンを置き換えます。

更新手順

  1. 新しいトークンコンテンツを含む JSON メッセージを $SYS/uploadToken にパブリッシュします。

  2. パブリッシュまたはサブスクライブ操作を実行する前に、PUBACK 応答を待ちます。クライアントが待たずに処理を進めると、ブローカーは古いトークンで認証を試み、認証失敗と切断を引き起こす可能性があります。

  3. 次回の再接続時にクライアントが新しいトークンを使用するように、ローカルのトークン設定を更新します。

メッセージフォーマット

トピック: $SYS/uploadToken

ペイロード: 以下のフィールドを含む JSON 文字列:

パラメータータイプ必須説明
tokenStringはい新しいトークン文字列
typeStringはいトークンタイプ:RW、または RW。無効なタイプは権限検証エラーを引き起こします。

ペイロードの例:

{
  "token": "<your-token-string>",
  "type": "RW"
}

応答: 標準の PUBACK メッセージ。

重要

トークンの更新が成功した後は、必ずローカルのトークン設定を更新してください。そうしないと、クライアントは次回の再接続時に古いトークンデータを使用する可能性があります。

トークン有効期限切れの通知

ApsaraMQ for MQTT ブローカーは、システムトピック $SYS/tokenExpireNotice を通じてクライアントに有効期限切れの警告をプッシュします。サブスクリプションは不要で、ブローカーはこれらの通知を直接配信します。

トピック: $SYS/tokenExpireNotice

ペイロード: 以下のフィールドを含む JSON 文字列:

パラメータータイプ説明
expireTimeLongトークンの有効期限時刻 (ミリ秒単位の UNIX タイムスタンプ)
typeStringトークンタイプ:RW、または RW

通知の動作

  • ブローカーは通常、トークンの有効期限が切れる約 5 分前に通知を送信します。

  • 配信は保証されません。トークンのライフサイクル管理をこれらの通知のみに依存しないでください。

  • 通知を受け取ったら、メッセージングの失敗を避けるために、速やかに新しいトークンをリクエストして更新してください。

トークン無効化の通知

ブローカーがトークン検証エラーを検出すると、システムトピック $SYS/tokenInvalidNotice を通じてクライアントにエラー通知をプッシュし、その後クライアントを切断します。サブスクリプションは不要です。

トピック: $SYS/tokenInvalidNotice

ペイロード: 以下のフィールドを含む JSON 文字列:

パラメータータイプ説明
codeintトークン検証失敗のタイプを識別するエラーコード
typeStringトークンタイプ:RW、または RW

エラーコード

コード説明
1トークンが偽造されており、解析できません
2トークンの有効期限が切れています
3トークンが取り消されています
4リソースとトークンが一致しません
5権限タイプとトークンが一致しません
8署名が無効です
-1アカウントの権限が無効です

切断の動作

ブローカーがトークン検証エラーを検出した場合:

  1. 認証が失敗します。

  2. ブローカーはエラーコードを $SYS/tokenInvalidNotice を通じてクライアントにプッシュします。

  3. ブローカーはクライアントを切断します。

再接続する前に、エラーコードを使用して根本原因を特定し、修正措置を講じてください。

ベストプラクティス

  • 短命なトークンを使用する。 トークン漏洩の影響を限定するために、トークンに妥当な有効期間を設定します。

  • TLS を有効にする。 クライアント接続を暗号化して、送信中のトークン傍受を防ぎます。

  • 有効期限切れに事前対応する。 配信が保証されないため、ブローカーの有効期限切れ通知のみに依存するのではなく、クライアントにトークン更新ロジックを実装します。

  • 認証情報を安全に保管する。 AccessKey ID をアプリケーションにハードコーディングするのではなく、環境変数やシークレットマネージャーから取得します。

  • ローカルとブローカーのトークンを同期させる。 $SYS/uploadToken を通じてトークンを更新した後は、再接続時に古いトークンが使用されるのを防ぐために、必ずローカルの設定を更新します。