RabbitMQ 启用 HTTP 后台认证

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

内容简介:版权声明:版权归博主所有,转载请带上本文链接!联系方式: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 后台认证》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

How to Build a Billion Dollar App

How to Build a Billion Dollar App

George Berkowski / Little, Brown Book Group / 2015-4-1 / USD 24.95

Apps have changed the way we communicate, shop, play, interact and travel and their phenomenal popularity has presented possibly the biggest business opportunity in history. In How to Build a Billi......一起来看看 《How to Build a Billion Dollar App》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试