Mosquitto: API認証
外部APIを使用して数千のデバイスを認証する方法
👋 Stackhero ドキュメントへようこそ!
Stackhero では、信頼性と柔軟性を重視したフルマネージドの Mosquitto MQTT クラウド 環境をご提供しています:
- 無制限のメッセージスループットとデータ転送により、ワークフローが人工的な制限に達することはありません。
- 独自の外部 API を利用した 無制限のデバイス認証で、オンボーディングやアクセス管理もシームレスに行えます。
- トピック、ユーザー、アクションごとに細かく制御できる 高度な ACL。
- HTTPS 対応の カスタムドメイン名で、セキュアかつブランド化されたエンドポイントを提供します(例:https://mqtt.your-company.com)。
- ワンクリックで適用できるアップデートにより、改善やセキュリティパッチも手間なく実施可能です。
- すべてのインスタンスが プライベートかつ専用インフラ上で稼働し、安定した パフォーマンスと強固な セキュリティを実現します。
IoT プロジェクトを加速し、運用負荷を大幅に削減しましょう。セキュアで本番運用に対応した Mosquitto MQTT クラウドホスティング インスタンスを、わずか数分で立ち上げることができます。
デバイス認証に関しては、主に2つのアプローチがあります。シンプルな方法を使用するか、外部APIに認証を委任することができます。
最もシンプルな方法は、20台未満のデバイスを持ち、高度なACLコントロールが不要な場合に適しています。この場合、Stackheroダッシュボードのサービス設定で各デバイスに個別のログインとパスワードを作成できます。
または、認証を外部APIに委任することもできます。このアプローチは動的な資格情報管理を提供し、強力なACLを実装することができます。ACL(アクセス制御リスト)は、各ユーザーに対して特定のトピックの公開または購読のための正確な権限を定義することができます。
MQTT API認証の仕組み
外部API認証の使用は、20台以上のIoTデバイスを持つ場合や、詳細なトピックACL管理が必要な場合に特に有用です。
デバイスがMQTTに接続すると、MosquittoはHTTP POSTリクエストをAPIに送信します。このリクエストには、デバイスのユーザー名とパスワードを含むJSONペイロードが含まれています。APIがHTTPステータスコード200を返すと、デバイスは認証されます。200以外のステータスコード(例えば401)は、デバイスのアクセス拒否を意味します。
ACLの検証中に、4つのパラメータが送信されます:username、clientid、topic、およびacc。APIは、usernameがtopicでaccによって定義された操作を実行することが許可されているかを確認する必要があります。accパラメータは次のように定義されます:
- 読み取りアクセス (1)
- 書き込みアクセス (2)
- 読み取りおよび書き込みアクセス (3)
- 購読アクセス (4)
例えば、ユーザーuserAがトピックsensors/temperaturesを購読しようとする場合、APIは次のJSONを受け取ります:
{
"username": "userA",
"clientid": "userA",
"topic": "sensors/temperatures",
"acc": 4
}
APIを介したユーザー認証を使用する場合でも、Stackheroダッシュボードでユーザーを手動で定義することができます。 この場合、手動で定義されたユーザーが優先されます。
Node.jsでのMQTT API認証
外部API認証が実際にどのように機能するかを示すために、Node.jsを使用したサンプルAPIサーバーを作成しました。完全なリポジトリはこちらで確認できます:https://github.com/stackhero-io/mosquittoGettingStarted。
Node-REDでのMQTT API認証
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の設定
Node-REDをAPI認証エンドポイントとして使用するには、Mosquittoの設定を次のように更新します:
API authenticationオプションを有効にします。HostフィールドをNode-REDドメインに設定します。ProtocolとしてHTTPSを選択し、Portに443を入力します。User routeを/mqttAuthentication/userGetとして指定します。ACLs routeを/mqttAuthentication/aclCheckとして指定します。
デバッグのために、「Authentication cache time」を1秒に設定することができます。設定が正常に動作するようになったら、推奨値は30秒です。
Mosquitto設定例
MQTT認証APIとしてのNode-REDの設定
Mosquittoの設定を更新した後、Node-REDを起動し、MQTT authenticationフローを開きます。Usersノードを編集してユーザー資格情報を設定します。提供された例には、いくつかのユーザー名とパスワードの組み合わせが含まれています。必要に応じてユーザーを追加してください。
Node-RED MQTT認証フロー