MQTT user management
Tutorial for creating credentials for the MQTT API.
Overview¶
In this article, you will learn how to create login credentials for the MQTT API using the HTTP API.
Preliminaries¶
To execute the examples provided in this tutorial, the following is needed:
- A valid login (username and password) to the aedifion.io platform. If you do not have a login yet, please contact us regarding a demo login. The login used in the example will not work!
- A project with live data ingress.
- An HTTP API client such as Curl or Postman.
- Optionally, an MQTT client such as MQTT.fx to test your credentials.
Creating MQTT users¶
MQTT credentials with limited validity can be created using the POST /v2/project/{project_id}/mqttuser
endpoint. This endpoint requires the following parameters
Parameter | Datatype | Type | Required | Description | Example |
---|---|---|---|---|---|
project_id | integer | path | yes | The numeric id of the project for which to add a new MQTT user account. | 1 |
username | string | body (JSON) | yes | The username of the new MQTT user. If that username exists, the request is rejected. | my_mqtt_user |
password | string | body (JSON) | yes | The password for the new MQTT user. | mys3cr3tp4ssw0rd |
rights | string | body (JSON) | no | Grant read or write permissions to this account. Note that write permission imply read permissions. Defaults to read. | read |
validity | integer | body (JSON) | no | This user account will expire after this many seconds. Maximum validity is 2 hours = 7200 seconds. | 3600 |
description | string | body (JSON) | no | Human readable description what this account is about. | A new test account just for reading. |
Example request
We create a new user my_mqtt_user
with read rights.
POST /v2/project/1/mqttuser
host: https://api.aedifion.io
accept: application/json
content-type: application/json
{
"username": "my_mqtt_user",
"password": "mys3cr3tp4ssw0rd",
"rights": "read",
"validity": 3600,
"description": "A new test account just for reading."
}
Example response
The response is a JSON-parseable object that contains the details of the created MQTT user. Please note: The request was posted at 16:23 CET with a validity of 3600 seconds, i.e., 1 hour. Thus the MQTT user will be valid until 17:23 CET, which is 16:23 UTC.
HTTP/1.1 201
content-type: application/json
{
"operation": "create",
"resource": {
"description": "A new test account just for reading.",
"id": 42,
"topics": [
{
"id": 123,
"rights": "read",
"topic": "lbg01/mybuilding/#"
}
],
"username": "my_mqtt_user",
"valid_until": "2019-01-18T16:23:01.707344Z"
},
"success": true
}
Modifying MQTT users¶
After the MQTT account expires it will be automatically removed. You can either create a new account with the same username afterwards or renew the existing account before it expires using the PUT /v2/project/{project_id}/mqttuser/{mqttuser_id}
endpoint. This endpoint generally allows you to modify the MQTT user account. It accepts the following parameters:
Parameter | Datatype | Type | Required | Description | Example |
---|---|---|---|---|---|
project_id | integer | path | yes | The numeric id of the project for which to edit an MQTT user account. | 1 |
mqttuser_id | integer | path | yes | The id of the existing MQTT user account to apply changes to. | 42 |
password | string | body (JSON) | no | The changed password for the given MQTT user account. | ch4ng3dp4ssw0rd |
validity | integer | body (JSON) | no | The expiry of the given MQTT user account will be extended by this many seconds into the future from the time of the update. Maximum validity is 2 hours = 7200 seconds. | 7200 |
description | string | body (JSON) | no | The changed human readable description what this account is about. | A new test account just for reading with a new password. |
Example request
With the following request, we change the description and password and extend the validity of the above created user.
PUT /v2/project/1/mqttuser/42
host: https://api.aedifion.io
accept: application/json
content-type: application/json
{
"description": "A new test account just for reading with a new password.",
"password": "ch4ng3dp4ssw0rd",
"validity": 7200
}
Example response
The response is a JSON-parseable object that contains the details of the modified MQTT user. Note that the following response was given to a request that was posted roughly at 16:28h CET. A successful response looks like this:
HTTP/1.1 201
content-type: application/json
{
"operation": "",
"resource": {
"description": "A new test account just for reading with a new password.",
"id": 42,
"topics": [
{
"id": 123,
"rights": "read",
"topic": "lbg01/mybuilding/#"
}
],
"username": "my_mqtt_user",
"valid_until": "2019-01-18T17:28:39.392003Z"
},
"success": true
}
As you can see, the expiry date of the MQTT user account was extended by 7200 seconds = 2 hours from the time of the update and the description is changed. Of course, the changed password is not reported in the response for security reasons and it is only saved as a cryptographic password hash on the server.