- メッセージの
publisher
(パブリッシャー) - メッセージの
subscriber
(サブスクライバー) - メッセージを仲介する
broker
(ブローカー)
topics
(トピック)(チャネル
またはサブジェクト
とも呼ばれる)の概念があります。トピックはパブリッシャーとサブスクライバー間のメッセージをルーティングします。
MQTTプロトコルは、usernames
およびpasswords
に基づいて基本的な認証メカニズムをサポートします。これらの資格情報は、CONNECT
メッセージとともに送信されます。
この記事では、nodejsベースのMQTTブローカー(moscaおよびAuth0)間の統合について説明します。この例では、Auth0を使ってpublishers
およびsubscribers
のブローカーに対する 認証 を行い、メッセージのルーティングを 認可 します。

ソリューションのコンポーネント
ブローカー
mosca はホストにとっては簡単で、他のサーバーに埋め込むことができます。このサンプルの目的上、 mosca サーバーを自己ホストします。auth0mosca
を使ってこれらの関数を実行します。Auth0は mosca に結びついています。
Auth0Moscaモジュール
この小さなモジュールには、 mosca で使用される4つの関数(authenticateWithCredentials
、authenticateWithJWT
、authorizePublish
、authorizeSubscribe
)があります。
authenticateWithCredentials
はOAuth2リソース所有者のパスワード資格情報付与を使って、ブローカーおよびブローカーへのすべての接続を認証します。publisher
またはsubscriber
が CONNECT メッセージをブローカーに送信するたびに、authenticate
関数が呼び出されます。この関数でAuth0エンドポイントを呼び出し、デバイスのusername
/password
を転送します。Auth0は、これをアカウントストア(コード内の最初のrequest.post
)と比較して検証します。検証に成功した場合、(JWT)を検証および解析してデバイスのプロファイルを取得し、subscriber
またはpublisher
を表すclient
オブジェクトに追加します。これは、jwt.verify
呼び出しで行われます。
慣例により、ブローカーに接続されたデバイスはすべて、Auth0にアカウントがあります。
デバイスプロファイルにもtopics
プロパティがあります。これは、この特定のデバイスが許可されたすべてのトピックを含む配列です。上のスクリーンショットでは、thermostat-1a
はtemperature
およびconfig
トピックへのパブリッシュ(またはサブスクライブ)が許可されます。
authorizePublish
関数とauthorizeSubscribe
関数は、要求された特定のトピックがこのリストに載っているかどうかを確認するだけです。
authenticateWithJWT
は、password
フィールドでJWTを想定します。この場合の流れは若干異なります。
- パブリッシャーとサブスクライバーがトークンを取得する
mosca
に接続してJWTを送信するmosca
がJWTを検証する- メッセージが送信されサブスクライバーに再送信される

パブリッシャー
このサンプルの場合、パブリッシャーはmqtt
モジュールを使用する単純なnodejsプログラムであり、正しい資格情報を追加します。
username
とpassword
は、Auth0に保存されているものに一致しなければなりません。
サブスクライバー
サブスクライバーはパブリッシャーに非常に似ています。Summary(概要)
ご覧のように、Auth0はさまざまなシナリオで簡単に使用することができます。Auth0のユーザーストアを使ってデバイスを管理します。時間や場所、デバイスIDといった他の状況に基づいて、はるかに洗練された認証ルールを記述することも当然可能です。これらはすべて、追加のプロファイル属性やルールを通じて非常に簡単に実装することができます。柔軟なAuth0 Profileが、任意のアーティファクト(この例のtopics
など)をサポートするためにどのように拡張できるかについても説明しています。
Rules(ルール)の詳細については、「Auth0 Rules」を確認してください。
資格情報(username
/password
)を安全でないネットワークを介して送信することは絶対に避けてください。メッセージ内容が公開されることを防ぐTransport Level Securityを提供する他の実装もあります。1つの例として、 mosca はTLSをサポートします。すべてのトラフィックが閉域網を通る場合を除き、運用環境への導入ではこれが優先されるでしょう。