Mosquitto: API認証

外部APIを使用して数千のデバイスを認証する方法

👋 Stackheroのドキュメントへようこそ!

Stackheroは、数多くの利点を提供する、すぐに使えるMosquitto MQTTクラウドソリューションを提供しています。

  • 無制限のメッセージ交換と転送。
  • 外部APIを介したデバイスの無制限認証。
  • トピック、ユーザー、アクションに対する高度なACL
  • HTTPSで保護されたカスタマイズ可能なドメイン名(例:https://mqtt.your-company.com)。
  • ワンクリックで簡単に更新
  • プライベートで専用のVMによる最適なパフォーマンスと強力なセキュリティ

時間を節約し、生活を簡素化:StackheroのMosquitto MQTTクラウドホスティングソリューションを試すのに5分しかかかりません!

デバイス認証に関しては、主に2つのアプローチがあります。シンプルな方法を使用するか、外部APIに認証を委任することができます。

最もシンプルな方法は、20台未満のデバイスを持ち、高度なACLコントロールが不要な場合に適しています。この場合、Stackheroダッシュボードのサービス設定で各デバイスに個別のログインとパスワードを作成できます。

または、認証を外部APIに委任することもできます。このアプローチは動的な資格情報管理を提供し、強力なACLを実装することができます。ACL(アクセス制御リスト)は、各ユーザーに対して特定のトピックの公開または購読のための正確な権限を定義することができます。

外部API認証の使用は、20台以上のIoTデバイスを持つ場合や、詳細なトピックACL管理が必要な場合に特に有用です。

デバイスがMQTTに接続すると、MosquittoはHTTP POSTリクエストをAPIに送信します。このリクエストには、デバイスのユーザー名とパスワードを含むJSONペイロードが含まれています。APIがHTTPステータスコード200を返すと、デバイスは認証されます。200以外のステータスコード(例えば401)は、デバイスのアクセス拒否を意味します。

ACLの検証中に、4つのパラメータが送信されます:usernameclientidtopic、およびacc。APIは、usernametopicaccによって定義された操作を実行することが許可されているかを確認する必要があります。accパラメータは次のように定義されます:

  1. 読み取りアクセス (1)
  2. 書き込みアクセス (2)
  3. 読み取りおよび書き込みアクセス (3)
  4. 購読アクセス (4)

例えば、ユーザーuserAがトピックsensors/temperaturesを購読しようとする場合、APIは次のJSONを受け取ります:

{
  "username": "userA",
  "clientid": "userA",
  "topic": "sensors/temperatures",
  "acc": 4
}

APIを介したユーザー認証を使用する場合でも、Stackheroダッシュボードでユーザーを手動で定義することができます。 この場合、手動で定義されたユーザーが優先されます。

外部API認証が実際にどのように機能するかを示すために、Node.jsを使用したサンプルAPIサーバーを作成しました。完全なリポジトリはこちらで確認できます:https://github.com/stackhero-io/mosquittoGettingStarted

Stackhero for Node-REDにはMosquittoサーバーが含まれています。しかし、高度な使用のためには、スタンドアロンのMosquittoサービスを持つことが推奨されます。 この例は、スタンドアロンのMosquittoサービスとNode-REDサービスを使用してAPI認証システムを使用する方法を示しています。 Node-REDに含まれるMosquittoサービスを使用している場合、このガイドは適用されません。

Stackhero for Node-REDは、「MQTT authentication」という名前のフローでMQTT API接続の例を提供しています。このフローは、Stackhero for Node-REDに統合されたMosquittoサーバーでも使用されます。

Node-REDをAPI認証エンドポイントとして使用するには、Mosquittoの設定を次のように更新します:

  1. API authenticationオプションを有効にします。
  2. HostフィールドをNode-REDドメインに設定します。
  3. ProtocolとしてHTTPSを選択し、Port443を入力します。
  4. User route/mqttAuthentication/userGetとして指定します。
  5. ACLs route/mqttAuthentication/aclCheckとして指定します。

デバッグのために、「Authentication cache time」を1秒に設定することができます。設定が正常に動作するようになったら、推奨値は30秒です。

Mosquitto設定例Mosquitto設定例

Mosquittoの設定を更新した後、Node-REDを起動し、MQTT authenticationフローを開きます。Usersノードを編集してユーザー資格情報を設定します。提供された例には、いくつかのユーザー名とパスワードの組み合わせが含まれています。必要に応じてユーザーを追加してください。

Node-RED MQTT認証フローNode-RED MQTT認証フロー