RabbitMQ - ACCESS_REFUSED - 登录被拒绝

问题描述 投票:0回答:3

我正在使用

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 版本在迁移过程中没有更改。

注意:我将 RabbitMQ 服务器从单独的服务器迁移到与消费者相同的服务器,因此现在消费者正在从本地主机获取数据。不知道后果,但我想这可以帮助你们帮助我。

authentication rabbitmq message-queue
3个回答
1
投票

所以我刚刚在谷歌上搜索了类似的问题解决方案,这就是我找到此页面的方式。我没有找到我的问题的直接答案,但我最终发现rabbitmq有2组不同的配置权限,它们并不完全重叠,在我的例子中,我对1组权限有0个权限,其他权限集的管理员权限。如果您遇到类似的情况,我会感到很受伤。

查看代码将使 2 组权利获得更多,但首先是一些背景上下文:

我的 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": ".*"
    }
  ]
}

好吧,当我最初看到标签属性时,我假设了任意值,我会在那里放置一个自记录标签,这相当于“”,这导致我对 Web 管理 GUI/REST API 拥有 0 权限,而下面我有所有“.*”,因此该部分具有完全的管理权限。这对我来说真的很困惑,因为(我收到一条错误消息,说我提供了无效的凭据,但凭据是正确的,我只是没有访问权限。)

如果不是这样,那么还有一个配置问题,默认情况下,访客只能访问本地主机,但您可以覆盖它。


1
投票

类似的问题,我们也面临着不同的技术堆栈。在我们的例子中,技术堆栈是:

  • 使用 Bitnami 包以 HA 模式部署在 Kubernetes (AKS) 中的 RabbitMQ
  • 在使用 Java 8 和 Spring Boot 框架创建的微服务中创建的消费者和生产者,使用 Apache Camel 也运行在同一个 Kubernetes 集群中

我们验证了以下几点:

  • 用户名和密码正确
  • 与所需 VHOST 关联的用户
  • 已授予所需权限(管理员标签)
  • 用户可以从 RabbitMQ Web 控制台登录
  • 从微服务 Pod 到 RabbitMQ 服务,主机和端口上存在连接(使用 telnet 等各种工具进行检查)
  • 所有代码和配置绝对相同(因为在较低环境下有相同的配置正常工作)

遇到问题:

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

经过大量调查和排查,我们发现用户名的大小大于消费者API支持的大小。 例如,我们使用用户名“生产应用用户”。该用户能够登录管理 Web 控制台,但无法从微服务登录。 我们刚刚将用户名更改为 8 个字符的新用户,然后它就开始工作了。

这看起来很奇怪,因为同一用户能够登录并共享发现。


0
投票

我的虚拟主机设置为“/abc”,它应该是“abc”

© www.soinside.com 2019 - 2024. All rights reserved.