RabbitMQ-ACCESS_REFUSED-登录被拒绝

时间:2018-07-18 13:46:08

标签: authentication rabbitmq message-queue

我正在使用rabbitmq-server,并使用Scala编写的使用者从中获取消息。这样做一直很吸引人,但是由于我将RabbitMQ服务器从一台服务器迁移到了另一台服务器,因此在尝试连接时出现以下错误:

com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.

此外,rabbitmq-server记录:

=INFO REPORT==== 18-Jul-2018::15:28:05 ===
accepting AMQP connection <0.7107.0> (127.0.0.1:42632 -> 127.0.0.1:5672)

=ERROR REPORT==== 18-Jul-2018::15:28:05 ===
Error on AMQP connection <0.7107.0> (127.0.0.1:42632 -> 127.0.0.1:5672, state: starting):
PLAIN login refused: user 'my_personal_user' - invalid credentials

=INFO REPORT==== 18-Jul-2018::15:28:05 ===
closing AMQP connection <0.7107.0> (127.0.0.1:42632 -> 127.0.0.1:5672)

我遍历了关于身份验证问题的所有SO问题,并找到了以下线索:

  • 我的凭据错误
  • 我正在尝试与guest 远程
  • 我的RabbitMQ版本与使用者不兼容

所有这些线索都没有帮助我。我的证书很好,我没有使用guest进行连接,而是具有我创建的具有完全访问权限和管理员的特权用户,并且我的RabbitMQ版本在迁移过程中没有更改。

NB:我将RabbitMQ服务器从单独的服务器迁移到了与我的使用者相同的服务器,所以现在使用者正在从localhost获取。不知道后果如何,但我认为它可以帮助你们帮助我。

1 个答案:

答案 0 :(得分:0)

所以我在Google解决方案中遇到了类似的问题,这就是我找到此页面的方式。我没有找到问题的直接答案,但最终我发现Rabbitmq具有2套不同的权限集,这些权限集彼此之间并不完全重叠,在我的情况下,我拥有1套权限的0套权限和另一组权限的管理员权限。如果您可能遇到类似情况,我会很伤心。

自那以后,看到代码会使这两组权利产生更多的收益,但首先要了解一些背景情况:

我的RMQ托管在Kubernetes上,那里是短暂的东西,我需要一些用户名和密码来预装一个新的Rabbitmq实例。在Kubernetes中,可以选择在首次启动时注入预配置的代理定义。 (当我说经纪人定义时,我指的是管理Web GUI中的该位置,可以选择导入和导出经纪人定义(又称为备份)或替换您的RMQ实时配置。)

这是我的配置的简化版本,其中删除了敏感内容:

{
  "vhosts": [
      {"name":"/"}
  ],
  "policies": [
    { 
      "name": "ha",
      "vhost": "/",
      "pattern": ".*",
      "definition": { 
        "ha-mode": "all",
        "ha-sync-mode": "automatic",
        "ha-sync-batch-size": 2
      }
    }
  ],
  "users": [
    {
      "name": "guest",
      "password": "guest",
      "tags": "management"
    },
    {
      "name": "admin",
      "password": "PASSWORD",
      "tags": "administrator"
    }
  ],
  "permissions": [
    {
      "user": "guest",
      "vhost": "/",
      "configure": "^$",
      "write": "^$",
      "read": "^$"
    },
    {
      "user": "admin",
      "vhost": "/",
      "configure": ".*",
      "write": ".*",
      "read": ".*"
    }
  ]
}

好吧,所以当我最初看到标签属性时,我假定了o任意值,我将在此处放置一个自我记录标签,它等同于“”,这使我对Web管理GUI / REST拥有0权限API,而在下面,我拥有所有“。*”,因此该部分具有完整的管理员权限。这真让我感到困惑,因为(我收到一条错误的错误消息,说我提供的凭据无效,但是凭据正确,只是我没有访问权限。)

如果不是那样,那么还会有这种配置,其中,默认情况下,guest虚拟机仅限于本地主机访问,但是您可以覆盖它。