Публикация RabbitMQ через управляющий HTTP API не_авторизована, но работает в веб-интерфейсе

#rabbitmq

#rabbitmq

Вопрос:

Я пытался опубликовать сообщение как на обменнике по умолчанию, так и на каком-либо другом обменнике через HTTP Management API, но я всегда получаю сообщение об ошибке авторизации.

 curl -i -u myuser:mypw -XPOST -d'{"properties":{},"routing_key":"my_key","payload":"my body","payload_encoding":"string"}' https://myinstance.rmq.cloudamqp.com/api/exchanges/vhost/myvhost/publish
  
 HTTP/1.1 401 Unauthorized
Server: nginx/1.14.2
Date: Mon, 01 Apr 2019 05:27:10 GMT
Content-Type: application/json
Content-Length: 53
Connection: keep-alive
content-security-policy: default-src 'self'
vary: accept, accept-encoding, origin

{"error":"not_authorised","reason":"Access refused."}%       
  

Я пробовал это как на самостоятельном RabbitMQ (установлен через helm на k8s), так и на нашем экземпляре CloudAMQP.

Но если я войду в веб-интерфейс управления с тем же пользователем, тогда я смогу опубликовать сообщение на exchange, а также использовать из очереди. Я ожидаю, что веб-интерфейс Management просто использует HTTP API для выполнения этих действий, поэтому я не понимаю, почему это работает, когда я делаю это через пользовательский интерфейс.

Чтение всего виртуального хостинга, с другой стороны, работает также с HTTP API.

 curl -i -u myuser:mypw https://myinstance.rmq.cloudamqp.com/api/vhosts
  
 HTTP/1.1 200 OK
  

Может кто-нибудь объяснить мне, что там происходит? Что меня больше всего озадачивает, так это тот факт, что он работает в пользовательском интерфейсе с использованием того же пользователя: pw.

Ответ №1:

Я разобрался с проблемой, я использовал неправильный URL-путь.

Для vhost: / и exchange по умолчанию это должно быть: http://myinstance.rmq.cloudamqp.com/api/exchanges///amq.default/publish

Ответ №2:

В моем случае, используя бесплатный тарифный план CloudAMQP, мне нужно было использовать свое имя пользователя в качестве vHost в URL-адресе:

https://myinstance.rmq.cloudamqp.com/api/exchanges/[myrandomusernamefromfreeplan]/amq.default/publish