EMQX http ACL auth - брокер недоступен - PullRequest
1 голос
/ 23 января 2020

Я использую EMQ X Broker v4.0.1. Простая http-аутентификация работает нормально, но когда я пытаюсь использовать http ACL-аутентификацию - она ​​не работает для меня, несмотря на то, что настройки очень близки. Когда я пытаюсь обратиться к брокеру через Eclipse Paho, я получаю сообщение об ошибке с кодом состояния 3, что означает, что брокер недоступен. Я включил emqx_auth_http с панели инструментов. Это мои настройки EMQX для аутентификации http ACL:

emqx.conf

listener.tcp.external = 1884
plugins/emqx_auth_http.conf

auth.http.auth_req = http://127.0.0.1:8991/mqtt/auth
auth.http.auth_req.method = post
auth.http.auth_req.params = clientid=%c,username=%u,password=%P

auth.http.super_req = http://somesite.com/mqtt/superuser
auth.http.super_req.method = post
auth.http.super_req.params = clientid=%c,username=%u

auth.http.acl_req = http://somesite/mqtt/acl
auth.http.acl_req.method = post
auth.http.acl_req.params = access=%A,username=%u,clientid=%c,ipaddr=%a,topic=%t,mountpoint=%m

auth.http.request.retry_times = 3
auth.http.request.retry_interval = 1s
auth.http.request.retry_backoff = 2.0

Конечные точки (http://somesite.com/mqtt/superuser, http://somesite/mqtt/acl) работают нормально, и я могу получить доступ к нему из приложения Postaman. Может быть, вы скажете мне, где я делаю что-то не так в моей конфигурации или где-то еще?

1 Ответ

1 голос
/ 06 февраля 2020

Возможно, вам нужно указать код HTTP-сервера.

Состояние восстановления http 200 в порядке

Статус восстановления http 4xx не авторизован

Статус восстановления http 200 и тело ignore означает перерыв

Этот проект только что прошел тест: egg-iot-with-mqtt

/**
 * Auth
 */
router.post('/mqtt/auth', async (ctx, next) => {
  const { clientid, username, password } = ctx.request.body
  // Mock
  // 200 means ok
  if (clientid === '' || 'your condition') {
    ctx.body = ''
  } else {
    // 4xx unauthorized
    ctx.status = 401
  }
})

/**
 * ACL
 */
router.post('/mqtt/acl', async (ctx, next) => {
  /**
   * Request Body
   * access:  1 | 2, 1 = sub, 2 = pub
   * access in body now is string !!!
  {
    access: '1',
    username: 'undefined',
    clientid: 'mqttjs_bf980bf7',
    ipaddr: '127.0.0.1',
    topic: 't/1',
    mountpoint: 'undefined'
  }
   */
  const info = ctx.request.body

  console.log(info)

  if (info.topic === 't/2') {
    // 200 is ok
    ctx.body = ''
  } else {
    // 4xx is unauthorized
    ctx.status = 403
  }
})
...