Rabbit MQ后端http授权不起作用

时间:2017-08-18 17:09:50

标签: rabbitmq authorization messagebroker rabbitmqadmin

我已配置rabbitmq-auth-backend-http,我的rabbitmq.config如下所示

[
  {rabbit, [{auth_backends, [rabbit_auth_backend_http, rabbit_auth_backend_internal]}]},
  {rabbitmq_auth_backend_http,
   [{http_method,   get},
    {user_path,     "http://localhost:8080/auth/user"},
    {vhost_path,    "http://localhost:8080/auth/vhost"},
    {resource_path, "http://localhost:8080/auth/resource"},
    {topic_path,    "http://localhost:8080/auth/topic"}]}
].

授权终点http://localhost:8080/auth已启动并正在运行。

但是当我尝试登录http://localhost:15672/api/whoami api时,状态代码500失败了。

使用rabbitmq内部数据库进行身份验证工作正常。唯一的问题是在rabbit_auth_backend_http中添加auth_backends无效。它甚至没有达到授权终点。我检查了var/rabbitmq/rabbit@localhost.log中的日志, 但没有帮助。我在这里发布日志

  

=错误报告==== 2017年8月18日:: 21:55:46 ===   Ranch监听器rabbit_web_dispatch_sup_15672已经以cowboy_protocol:start_link / 4&lt; 0.574.0&gt;开始连接过程了。退出原因:{[{reason,undef},{mfa,{rabbit_mgmt_wm_whoami,is_authorized,2}},{stacktrace,[{rabbit_auth_backend_http,user_login_authentication,[&lt;&lt;&#34; test&#34;&gt;&gt;&gt; ,[{密码,&LT;&LT;&#34;测试&#34;&GT;&GT;}]],[]},{rabbit_access_control,try_authenticate,3,[{文件,&#34; SRC / rabbit_access_control.erl&# 34;},{线,88}]},{rabbit_access_control,&#39; -check_user_login / 2-乐趣0 - &#39;,4,[{文件,&#34; SRC / rabbit_access_control.erl&#34 ;},{线,74}]},{列表,与foldl,3,[{文件,&#34; lists.erl&#34;},{线,1263}]},{rabbit_mgmt_util,is_authorized,6,[ {文件,&#34; SRC / rabbit_mgmt_util.erl&#34;},{线,149}]},{cowboy_rest,呼叫,3,[{文件,&#34; SRC / cowboy_rest.erl&#34;}, {线,976}]},{cowboy_rest,is_authorized,2,[{文件,&#34; SRC / cowboy_rest.erl&#34;},{线,150}]},{cowboy_protocol,执行,4,[{文件,&#34; SRC / cowboy_protocol.erl&#34;},{线,442}]}]},{REQ,[{插座,#端口&LT; 0.26006&GT;},{运输,ranch_tcp},{连接,存活},{PID,&LT; 0.574.0&GT;},{方法,&LT;&LT;&#34; GET&#34;&GT;&GT;},{版本,&#39; HTTP / 1.1&#3 9;},{对等体,{{127,0,0,1},51220}},{主机,&LT;&LT;&#34;本地主机&#34;&GT;&GT;},{host_info,未定义},{端口,15672},{路径,&LT;&LT;&#34; / API / WHOAMI&#34;&GT;&GT;},{PATH_INFO,未定义},{QS,&LT;&LT;&GT;&GT;},{qs_vals ,[]},{绑定,[]},{标头,[{&LT;&LT;&#34;主机&#34;&GT;&GT;,&LT;&LT;&#34;本地主机:15672&#34;&GT; &GT;},{&LT;&LT;&#34;连接&#34;&GT;&GT;,&LT;&LT;&#34;保活&#34;&GT;&GT;},{&LT;&LT;&#34 ;授权&#34;&gt;&gt;,&lt;&lt;&#34;基本dGVzdDp0ZXN0&#34;&gt;&gt;},{&lt;&lt;&#;用户代理&#34;&gt;&gt;,&lt; ;&lt;&#;; Mozilla / 5.0(Macintosh; Intel Mac OS X 10_12_6)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 60.0.3112.90 Safari / 537.36&#34;&gt;&gt;},{&lt;&lt;&#34; content-type&#34;&gt; &GT;,&LT;&LT;&#34;应用/ JSON&#34;&GT;&GT;},{&LT;&LT;&#34;接受&#34;&GT;&GT;,&LT;&LT;&#34; < EM> / &#34;&GT;&GT;},{&LT;&LT;&#34;引荐&#34;&GT;&GT;,&LT;&LT;&#34; http://localhost:15672/&# 34;&gt;&gt;},{&lt;&lt;&#34; accept-encoding&#34;&gt;&gt;,&lt;&lt;&#34; gzip,deflate,br&#34;&gt;&gt;}, {&LT;&LT;&#34;接受语言&#34;&GT;&GT;,&LT;&LT;&#34;的en-US,连接; q = 0.8&#34;&GT;&GT;},[{&LT ;&LT;&#34;连接&#34;&GT;&GT;,并[d&LT;&#34;保活&#34;&GT;&GT;]}]},{饼干,未定义},{元,[ ]},{body_state,等待},{缓冲器,&LT;&LT;&GT;&GT;},{多,未定义},{resp_compress,TRUE},{resp_state,等待},{resp_headers,[{&LT;&LT;& #34;变化&#34;&GT;&GT;,&LT;&LT;&#34;来源&#34;&GT;&GT;}]},{resp_body,&LT;&LT;&GT;&GT;},{onresponse,#趣味}]},{状态,{上下文中,未定义的,无,未定义}}],[{cowboy_rest,error_terminate,5,[{文件,&#34; SRC / cowboy_rest.erl&#34;},{线,1009} ]},{cowboy_re ST,is_authorized,2,[{文件,&#34; SRC / cowboy_rest.erl&#34;},{线,150}]},{cowboy_protocol,执行,如图4所示,[{文件,&#34; SRC / cowboy_protocol .erl&#34;},{线,442}]}]}

我做错了什么?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

发布此问题rabbitmq-user谷歌小组后,我得到了解决方案。您需要手动安装rabbitmq-auth-backend-http。 在rabbitmq.config文件中添加配置将不会安装它。

这是更多detailed answer的链接。

关于rabbitmq-auth-backend-http插件的另一个重要事项是您必须在rabbitmq.config文件中配置所有端点(user_path,vhost_path,topic_path,resource_path)。如果错过任何端点,rabbitmq将在default values以下进行授权。

{user_path,     "http://localhost:8000/auth/user"},
{vhost_path,    "http://localhost:8000/auth/vhost"},
{resource_path, "http://localhost:8000/auth/resource"},
{topic_path,    "http://localhost:8000/auth/topic"}