HTTP AUTH
Для аутентификации HTTP используется внешний самописный источник данных аутентификации приложения HTTP, и результат аутентификации определяется на основе данных, возвращаемых API HTTP. Это позволяет реализовать сложную логику аутентификации.
rmqtt-auth-http
plugins/rmqtt-auth-http.toml
##--------------------------------------------------------------------
## rmqtt-auth-http
##--------------------------------------------------------------------
# См. больше ключей и их определения на https://github.com/rmqtt/rmqtt/blob/master/docs/en_US/auth-http.md
http_timeout = "5s"
http_headers.accept = "*/*"
http_headers.Cache-Control = "no-cache"
http_headers.User-Agent = "RMQTT/0.8.0"
http_headers.Connection = "keep-alive"
## Отключиться, если публикация отклонена
##
## Значение: true | false
## По умолчанию: true
disconnect_if_pub_rejected = true
## Отключение по истечении срока действия
##
## Значение: true | false
## По умолчанию: false
disconnect_if_expiry = false
## Возвращать «Запретить», если запрос HTTP вызывает ошибку, иначе «Игнорировать»
##
## Значение: true | false
## По умолчанию: true
deny_if_error = true
##--------------------------------------------------------------------
## Запрос аутентификации.
##
## Переменные:
## - %u: имя пользователя
## - %c: идентификатор клиента
## - %a: IP-адрес
## - %r: протокол
## - %P: пароль
##
## Значение: URL
http_auth_req.url = "http://127.0.0.1:9090/mqtt/auth"
## Значение: post | get | put
http_auth_req.method = "post"
## Заголовок HTTP-запроса аутентификации
## Content-Type В настоящее время поддерживаемые значения: application/x-www-form-urlencoded, application/json
http_auth_req.headers = { content-type = "application/x-www-form-urlencoded" }
#http_auth_req.headers.content-type="application/json"
## Значение: Params
http_auth_req.params = { clientid = "%c", username = "%u", password = "%P" }
##--------------------------------------------------------------------
## ACL-запрос.
##
## Переменные:
## - %A: 1 | 2, 1 = sub, 2 = pub
## - %u: имя пользователя
## - %c: идентификатор клиента
## - %a: IP-адрес
## - %r: протокол
## - %t: тема
##
## Значение: URL
http_acl_req.url = "http://127.0.0.1:9090/mqtt/acl"
## Значение: post | get | put
http_acl_req.method = "post"
## Значение: Params
http_acl_req.params = { access = "%A", username = "%u", clientid = "%c", ipaddr = "%a", topic = "%t" }
TIP
Плагин rmqtt-auth-http также включает функцию ACL, которую можно отключить с помощью комментариев.
RMQTT Broker: в событии подключения устройства используйте текущую информацию о клиенте в качестве параметров для отправки запроса в пользовательскую службу аутентификации для запроса разрешений. Аутентификация запроса обрабатывается на основе возвращённой информации ответа HTTP.
Примеры ответов:
HTTP/1.1 200 OK
X-Superuser: true
Content-Type: text/plain
Content-Length: 5
Date: Wed, 07 Jun 2023 01:29:23 GMT
allow
Начиная с версии RMQTT 0.8.0, вы можете установить необязательное поле acl
в теле ответа, чтобы указать разрешения клиента. Для получения более подробной информации обратитесь к списку управления доступом (ACL).
Начиная с RMQTT версии 0.8.0, можно установить дополнительное поле expire_at
в ответе. Тело ответа для указания времени истечения срока аутентификации клиента и принудительного отключения клиента для повторной аутентификации. Значение должно быть временной меткой Unix (в секундах).
Примеры ответов:
HTTP/1.1 200 OK
Content-Length: 565
Content-Type: application/json; charset=utf-8
Date: Wed, 25 Sep 2024 01:54:37 GMT
{
"result": "allow", // "allow" | "deny" | "ignore"
"superuser": false, // true | false, Если это поле пустое, значение по умолчанию — `false`
"expire_at": 1827143027, // Необязательно, время истечения срока аутентификации
"acl": [
{
"action": "all",
"permission": "allow",
"topic": "foo/${clientid}"
},
{
"action": "subscribe",
"permission": "allow",
"qos": [1, 2],
"topic": "eq foo/1/#"
},
{
"action": "publish",
"permission": "deny",
"retain": true,
"topic": "foo/4"
}
]
}
СОВЕТ Для поддержки предопределённых разрешений ACL необходимо установить формат Content-Type в значение 'application/json'.
При выполнении аутентификации RMQTT будет использовать текущую информацию о клиенте для заполнения и инициирования пользовательского запроса на аутентификацию. Этот запрос используется для получения данных аутентификации клиента с HTTP-сервера.
# etc/plugins/rmqtt-auth-http.toml
## Адрес запроса
http_auth_req.url = "http://127.0.0.1:9090/mqtt/auth"
## Метод HTTP-запроса
## Значение: post | get | put
http_auth_req.method = "post"
## Заголовки HTTP-запросов для запроса аутентификации, заголовок Content-Type настроен по умолчанию.
## Возможные значения заголовка Content-Type: application/x-www-form-urlencoded, application/json
http_auth_req.headers = { content-type = "application/x-www-form-urlencoded" }
## Параметр запроса
http_auth_req.params = { clientid = "%c", username = "%u", password = "%P" }
Когда метод HTTP-запроса — GET, параметры запроса будут переданы в виде строки запроса URL; при запросах POST и PUT они будут отправлены в виде Json или обычной формы (определяется значением content-type).
Вы можете использовать следующие заполнители в запросе аутентификации, и RMQTT Broker автоматически заполнится информацией о клиенте при запросе:
СОВЕТ Рекомендуется использовать методы POST и PUT. При использовании метода GET открытый текст пароля может быть записан вместе с URL в журнале сервера во время передачи.
Аутентификация HTTP использует внешнее самодельное HTTP-приложение в качестве источника данных аутентификации и авторизации. Оно определяет результат авторизации на основе данных, возвращаемых HTTP API, что позволяет реализовать сложную логику проверки ACL.
Плагин:
rmqtt-auth-http
СОВЕТ Плагин rmqtt-auth-http включает функции аутентификации и может быть отключён путём комментирования определённых разделов кода.
Чтобы включить HTTP ACL, необходимо настроить следующее в etc/plugins/rmqtt-auth-http.toml
:
RMQTT использует текущую связанную с клиентом информацию в качестве параметров в событиях публикации и подписки устройства для отправки запроса в пользовательскую службу аутентификации для разрешения. Запрос авторизации ACL обрабатывается на основе возвращённой информации HTTP-ответа.
При выполнении аутентификации публикации и подписки RMQTT заполняет текущую информацию о клиенте и инициирует запрос на авторизацию ACL, настроенный пользователем. Этот запрос используется для получения данных авторизации клиента с HTTP-сервера.
Если пользователь является суперпользователем, аутентификация авторизации ACL будет пропущена.
# etc/plugins/rmqtt-auth-http.toml
## Адрес запроса
http_acl_req.url = "http://127.0.0.1:9090/mqtt/acl"
## Метод HTTP-запроса
## Значение: post | get | put
http_acl_req.method = "get"
## Заголовки HTTP-запросов для запроса Auth, заголовок Content-Type настроен по умолчанию.
## Возможные значения заголовка Content-Type: application/x-www-form-urlencoded, application/json
#http_acl_req.headers = { content-type = "application/x-www-form-urlencoded" }
## Параметр запроса
http_acl_req.params = { access = "%A", username = "%u", clientid = "%c", ipaddr = "%a", topic = "%t" }
Когда метод HTTP-запроса — GET, параметры запроса будут переданы в виде строк запроса URL. Для запросов POST и PUT параметры будут отправлены как обычная форма в формате «x-www-form-urlencoded» (content-type: x-www-form-urlencoded).
В запросе аутентификации можно использовать следующие заполнители, и RMQTT автоматически заполнит их информацией о клиенте: %u: имя пользователя; %c: идентификатор клиента; %a: IP-адрес клиента; %r: протокол доступа клиента. Значения: 3=3.1, 4=3.1.1 или 5=5.0; %P: пароль в открытом виде; %p: порт клиента.
СОВЕТ Рекомендуется использовать методы POST и PUT. При использовании метода GET простой текстовый пароль может быть записан в журналах сервера во время процесса передачи вместе с URL.
Базовая информация и заголовки HTTP API-запроса.
# etc/plugins/rmqtt-auth-http.toml
## Конфигурация заголовка запроса
http_timeout = "5s"
http_headers.accept = "*/*"
http_headers.Cache-Control = "no-cache"
http_headers.User-Agent = "RMQTT/0.8.0"
http_headers.Connection = "keep-alive"
# Если публикация сообщения отклонена, соединение будет разорвано.
disconnect_if_pub_rejected = true
# Если HTTP-запрос сталкивается с ошибкой, вернуть «deny»; в противном случае вернуть «ignore».
deny_if_error = true
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )