RabbitMQ 启用 HTTP 后台认证

栏目: 后端 · 发布时间: 5年前

内容简介:版权声明:版权归博主所有,转载请带上本文链接!联系方式:abel533@gmail.com https://blog.csdn.net/isea533/article/details/85096253

版权声明:版权归博主所有,转载请带上本文链接!联系方式:abel533@gmail.com https://blog.csdn.net/isea533/article/details/85096253

RabbitMQ 安装配置和 Spring 集成

https://blog.csdn.net/isea533/article/details/84545484

本文参考资料:

  1. https://www.rabbitmq.com/configure.html
  2. https://www.rabbitmq.com/access-control.html
  3. https://github.com/rabbitmq/rabbitmq-auth-backend-http
  4. https://github.com/rabbitmq/rabbitmq-auth-backend-cache

环境:RabbitMQ 版本为 3.7.9,操作系统为 Ubuntu 18.04 LTS

启用 HTTP 后台认证需要使用 rabbitmq_auth_backend_http 插件,同时该插件还推荐配合 rabbitmq_auth_backend_cache 通过缓存减轻授权认证服务器压力。

启用插件

输入以下命令查看所有插件:

$ sudo rabbitmq-plugins list
# 输出部分日志
 Configured: E = explicitly enabled; e = implicitly enabled
 | Status: * = running on rabbit@redissvr
 |/
[  ] rabbitmq_amqp1_0                  3.7.9
[  ] rabbitmq_auth_backend_cache       3.7.9
[  ] rabbitmq_auth_backend_http        3.7.9
[  ] rabbitmq_auth_backend_ldap        3.7.9
[  ] rabbitmq_auth_mechanism_ssl       3.7.9
[  ] rabbitmq_consistent_hash_exchange 3.7.9
[  ] rabbitmq_event_exchange           3.7.9
[  ] rabbitmq_federation               3.7.9
[  ] rabbitmq_federation_management    3.7.9
...

通过下面命令分别启用这两个插件:

$ sudo rabbitmq-plugins enable rabbitmq_auth_backend_http

# 和

$ sudo rabbitmq-plugins enable rabbitmq_auth_backend_cache

通过 sudo rabbitmqctl environment 查看系统默认设置,和这两个插件相关的部分配置如下:

{rabbit,
     [{auth_backends,[rabbit_auth_backend_internal]},
      {auth_mechanisms,['PLAIN','AMQPLAIN']},
...
{rabbitmq_auth_backend_cache,
     [{cache_module,rabbit_auth_cache_ets},
      {cache_module_args,[]},
      {cache_refusals,false},
      {cache_ttl,15000},
      {cached_backend,rabbit_auth_backend_internal}]},
 {rabbitmq_auth_backend_http,
     [{http_method,get},
      {resource_path,"http://localhost:8000/auth/resource"},
      {topic_path,"http://localhost:8000/auth/topic"},
      {user_path,"http://localhost:8000/auth/user"},
      {vhost_path,"http://localhost:8000/auth/vhost"}]},
...

下面通过添加配置文件来修改默认配置。

添加配置

不同操作系统中配置文件默认的位置分别如下:

  • Generic UNIX - $RABBITMQ_HOME/etc/rabbitmq/
  • Debian - /etc/rabbitmq/
  • RPM - /etc/rabbitmq/
  • Mac OSX (Homebrew) - ${install_prefix}/etc/rabbitmq/, the Homebrew prefix is usually /usr/local
  • Windows - %APPDATA%\RabbitMQ\

本文 Ubuntu 配置文件在 /etc/rabbitmq/ 目录。

默认情况下 RabbitMQ 使用的默认配置,在该目录下面并没有配置文件,需要自己手动创建。

RabbitMQ 从 3.7.0 版本开始推荐使用 sysctl 格式的配置,但是仍然支持老版本 Erlang 语法。

不同格式的配置文件名如下:

  • rabbitmq.conf - sysctl 格式的配置文件
  • advanced.config - Erlang 语法进行高级配置的文件,这个配置会和 rabbitmq.conf 合并使用
  • rabbitmq.config - 老版本 Erlang 语法

在参考资料的给出的 4 个地址的文档中都给出了两种语法的配置方法,本文采用 sysctl 格式进行配置。

在配置目录新增 rabbitmq.conf 配置文件,添加如下配置:

auth_backends.1 = cache
# 启用 cache 后,不需要直接指定 http 方式
# auth_backends.1 = http
auth_backends.2 = internal
# 缓存后端指定为 http
auth_cache.cached_backend = http
# 认证请求类型
auth_http.http_method   = post
# 认证和授权地址,官方提供了 Spring Boot 示例
# 根据需要配置下面地址
auth_http.user_path = http://localhost:8080/auth/user
auth_http.vhost_path = http://localhost:8080/auth/vhost
auth_http.resource_path = http://localhost:8080/auth/resource
auth_http.topic_path = http://localhost:8080/auth/topic
# 缓存时间,单位毫秒
auth_cache.cache_ttl = 60000

认证可选项说明:

配置好后,重启 RabbitMQ 服务:

# 关闭
$ sudo rabbitmqctl stop_app
# 启动
$ sudo rabbitmqctl start_app

命令参考: https://www.rabbitmq.com/rabbitmqctl.8.html

重启后,通过 sudo rabbitmqctl environment 查看配置是否成功。

启动授权认证服务

使用官方提供的示例进行测试:

https://github.com/rabbitmq/rabbitmq-auth-backend-http/tree/master/examples/rabbitmq_auth_backend_spring_boot

可以直接从 GitHub 下载,或者从下面网盘下载单独的 Spring Boot 示例部分:

链接: https://pan.baidu.com/s/1RjF-hXdYml0KHgt-wRSweQ

提取码: hsbt

该示例代码中提供了下面几个用户:

private final Map<String, User> users = new HashMap<String, User>() {{
    put("guest",   new User("guest", "guest", asList("administrator", "management")));
    put("springy", new User("springy", "springy", asList("administrator", "management")));
}};

上面在配置后台认证的时候,同时指定了 cache(http) 和 internal 方式,所以我们原有的账号即使在没有 http 认证服务器的情况下仍然可以登录。

guest 本身是系统默认账号,只能从 localhost 登陆。所以如果你不是 localhost 访问,可以尝试 springy 登陆。

通过 springy/springy 可以成功登陆,你并没有创建过该账号,但是可以登录系统。

如果你通过 HTTP 方式登陆后台,由于界面会自动刷新,你可以发现几乎间隔 60 秒就会重新进行认证,这个间隔由 auth_cache.cache_ttl 缓存过期时间控制。

当对队列交换机等功能进行操作时,会调用其它的 API 验证权限。

当使用 HTTP 认证成功时,会通过 HTTP 方式进行授权。如果认证失败,就会继续调用 internal 方式进行认证,internal 方式认证成功时,后续的授权也是通过 internal 方式进行。

通过那种方式认证成功,就会继续使用该方式进行授权。


以上所述就是小编给大家介绍的《RabbitMQ 启用 HTTP 后台认证》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

持续交付

持续交付

Jez Humble、David Farley / 乔梁 / 人民邮电出版社 / 2011-10 / 89.00元

Jez Humble编著的《持续交付(发布可靠软件的系统方法)》讲述如何实现更快、更可靠、低成本的自动化软件交付,描述了如何通过增加反馈,并改进开发人员、测试人员、运维人员和项目经理之间的协作来达到这个目标。《持续交付(发布可靠软件的系统方法)》由三部分组成。第一部分阐述了持续交付背后的一些原则,以及支持这些原则的实践。第二部分是本书的核心,全面讲述了部署流水线。第三部分围绕部署流水线的投入产出讨......一起来看看 《持续交付》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具