ApsaraMQ for MQTT は、トークンベースの認証モードで ApsaraMQ for MQTT クライアントに一時的なアクセス権限を提供します。 ApsaraMQ for MQTT が提供するトークンを使用して、オンプレミスアカウントシステムで管理されているユーザーに一時的な認証情報を発行し、そのアクセス権限を管理できます。 これにより、単一のクライアントと単一のリソースに対してきめ細かいアクセスの制御を実装できます。 このトピックでは、トークンベースの認証のプロセスと使用上の注意について説明します。
用語
用語 | 説明 |
トークン(一時的な認証情報) | 単一の ApsaraMQ for MQTT クライアントに特定のリソースへのアクセス権限を付与するために ApsaraMQ for MQTT が発行する一時的な認証情報。 |
アプリケーションサーバー | オンプレミスアカウントを管理し、ApsaraMQ for MQTT クライアントのトークンを申請および管理するために使用するサーバー。 |
ApsaraMQ for MQTT ブローカー | ApsaraMQ for MQTT で権限を認証し、メッセージを送受信するために使用されるサーバー。 ApsaraMQ for MQTT ブローカーを使用して、アプリケーションサーバーによって開始されたトークン関連のリクエストを処理し、メッセージを送受信できます。 |
プロセス
署名認証モードと比較して、トークンベースの認証モードは使い方がより複雑です。 次の図に示すプロセスに基づいてアプリケーションサーバーをデプロイする必要があります。 さらに、ApsaraMQ for MQTT クライアントが初期化中にアプリケーションサーバーと対話してトークンを取得および更新できることを確認する必要があります。
図 1. 認証プロセス
認証プロセスについて、以下の項目で説明します。
ApsaraMQ for MQTT クライアントが起動すると、認証のためにアプリケーションサーバーに接続します。
ApsaraMQ for MQTT クライアントは、特定のトピックにアクセスするために必要なすべての権限をアプリケーションサーバーに申請します。
アプリケーションサーバーは、ApsaraMQ for MQTT クライアントがトピックに対する操作を実行する権限が付与されているかどうかを確認します。 確認に合格した場合、アプリケーションサーバーは ApsaraMQ for MQTT ブローカーからリソース関連のトークンを申請します。
ApsaraMQ for MQTT ブローカーはトークン申請リクエストを確認し、リクエストが有効な場合は対応するトークンを返します。
アプリケーションサーバーは、返されたトークンを永続的に保存し、必要な権限をトークンにマッピングします。 トークンキャッシュには、次の利点があります。
ApsaraMQ for MQTT クライアントが再起動後に同じ権限を使用して ApsaraMQ for MQTT ブローカーに再接続する場合、アプリケーションサーバーはキャッシュされたトークンをクライアントに返して、トークンの繰り返し申請を防ぎます。
エラーが原因で ApsaraMQ for MQTT ブローカーが ApsaraMQ for MQTT クライアントからのトークン申請リクエストを処理できない場合、アプリケーションサーバーは以前に申請されたトークンをローカルディザスタリカバリのために返します。
ApsaraMQ for MQTT クライアントは、仕様に基づいてトークンをパラメーターとして指定し、ApsaraMQ for MQTT ブローカーに接続します。 クライアントは、ブローカーによって認証された後にメッセージを送受信できます。
ApsaraMQ for MQTT クライアントは、想定どおりにメッセージを送受信します。 ApsaraMQ for MQTT ブローカーがトークンの期限が切れていると判断した場合、ブローカーは認証エラーをトリガーし、ApsaraMQ for MQTT クライアントを切断します。 この場合、クライアントはトークンを再申請する必要があります。
ApsaraMQ for MQTT クライアントの制限
ApsaraMQ for MQTT クライアントは、アプリケーションサーバーからトークンとトークンの有効期限を取得して、トークンのリフレッシュ時間を計算する必要があります。
ApsaraMQ for MQTT クライアントは、[パスワード] フィールドに接続パラメーターとしてトークンを指定し、接続が確立されるたびにトークンをアップロードする必要があります。
ApsaraMQ for MQTT クライアントは、使用されているトークンの有効期間を認識し、トークンが期限切れになっていないことを確認する必要があります。 トークンが期限切れになると、ApsaraMQ for MQTT ブローカーはクライアントを切断します。
ApsaraMQ for MQTT クライアントは、ApsaraMQ for MQTT ブローカーによってプッシュされたトークン有効期限通知をリッスンできます。 ただし、ブローカーはプッシュが常にトリガーされることを保証しません。 通知はトラブルシューティングのみに使用できます。
ApsaraMQ for MQTT クライアントは、再接続ごとに同じトークンを申請することを避けるために、アプリケーションサーバーによって返されたトークンを永続的に保存する必要があります。 アプリケーションサーバーが多数の ApsaraMQ for MQTT クライアントから同時に接続リクエストを受信すると、アプリケーションサーバーは予期せず終了します。
ApsaraMQ for MQTT クライアントのトークンを更新するには、既存のクライアント接続を閉じて、新しいトークンを使用して接続を確立します。 また、ApsaraMQ for MQTT が提供するシステム定義のトピックを使用して、トークンを動的に更新することもできます。 ApsaraMQ for MQTT が提供するシステム定義のトピックを使用してトークンを動的に更新する場合は、次の接続初期化のためにオンプレミス構成も更新されていることを確認してください。
アプリケーションサーバーの制限
アプリケーションサーバーは、対応する ApsaraMQ for MQTT クライアントを認証して、クライアントが偽の ID を使用してトークンを申請することを防ぐ必要があります。
アプリケーションサーバーは、トークンとクライアントの関係、分散トークン、対応する権限の内容、および有効期間を管理して、同じ ApsaraMQ for MQTT クライアントが繰り返しトークンを申請することを防ぐ必要があります。
アプリケーションサーバーが ApsaraMQ for MQTT クライアントにトークンを返す場合、サーバーはクライアントにトークンの操作許可と有効期限を通知する必要があります。 これにより、クライアントは事前にトークンをリフレッシュできます。
アプリケーションサーバーは、オンプレミスのディザスタリカバリを実装する必要があります。 これにより、ApsaraMQ for MQTT ブローカーが一時的に使用できなくなるシナリオでの業務継続性を確保できます。
関連 API 操作
関連 API 操作を呼び出して、トークンベースの認証を実装できます。
アプリケーションサーバーは、トークンの申請と失効を担当し、HTTPS 経由で API 操作を呼び出すことによって ApsaraMQ for MQTT ブローカーと対話します。
各 API 操作では、AccessKey ペアとリクエスト署名を使用して実行される ID 検証が必要です。 トークンの申請、失効、および検証操作がサポートされています。 詳細については、「トークン認証におけるアプリケーションサーバー関連のメソッド」をご参照ください。
ApsaraMQ for MQTT クライアントは、トークンの動的更新、トークン有効期限通知のリッスン、およびトークン無効通知のリッスンの操作を提供します。 詳細については、「トークン認証におけるクライアント関連のメソッド」をご参照ください。