rabbitmq_auth_backend_http 插件
一、rabbitmq 中启用 rabbitmq_auth_backend_http 插件
命令:
[root@localhost rabbitmq]# rabbitmq-plugins list
Listing plugins with pattern ".*" ...
Configured: E = explicitly enabled; e = implicitly enabled
| Status: * = running on rabbit@localhost
|/
[ ] rabbitmq_amqp1_0 3.9.10
[ ] rabbitmq_auth_backend_cache 3.9.10
[E*] rabbitmq_auth_backend_http 3.9.10
[ ] rabbitmq_auth_backend_ldap 3.9.10
[ ] rabbitmq_auth_backend_oauth2 3.9.10
[ ] rabbitmq_auth_mechanism_ssl 3.9.10
[ ] rabbitmq_consistent_hash_exchange 3.9.10
[E*] rabbitmq_delayed_message_exchange 3.9.0
[E*] rabbitmq_event_exchange 3.9.10
[ ] rabbitmq_federation 3.9.10
......
[root@localhost rabbitmq]# rabbitmq-plugins enable rabbitmq_auth_backend_http
......
前面带 [E*]
的代表已启用
二、修改配置文件
rabbitmq的配置文件默认在 /etc/rabbitmq/rabbitmq.conf
,如果没有这个文件,则需要自己手动创建这个文件。
修改文件 vi /etc/rabbitmq/rabbitmq.conf
,写入如下内容:
# 优先使用内部认证
auth_backends.1 = internal
# 如果内部认证 没有找到用户,则请求http认证
auth_backends.2 = http
# 认证请求类型
auth_http.http_method = post
# 认证和授权地址,官方提供了 Spring Boot 示例
auth_http.user_path = http://192.168.1.102:19085/auth/user
auth_http.vhost_path = http://192.168.1.102:19085/auth/vhost
auth_http.resource_path = http://192.168.1.102:19085/auth/resource
auth_http.topic_path = http://192.168.1.102:19085/auth/topic
配置文件中依次配置了 auth_backends.1 = internal
和auth_backends.2 = http
,意思是优先使用内部认证,如果内部认证 没有找到用户,则请求http认证。
当然也可以直接配置auth_backends.1 = http
,这样会直接走http认证,忽略内部认证。(内部认证为rabbitmq服务本地配置的内部用户)
auth_http.user_path 校验用户登录
auth_http.vhost_path 验证虚拟主机权限
auth_http.resource_path 校验使用资源权限(交换机,队列)
auth_http.topic_path 检查主题是否可以订阅
rabbitmq官方给我们提供了一些后端校验的案例:https://github.com/rabbitmq/rabbitmq-auth-backend-http
其中启动包含了springboot的案例,和一些其他语言的案例。
三、开启验证缓存功能
开启http认证后,每次登录或订阅主题登录都会请求http验证权限,过于频繁会影响性能,此时可以开启缓存,在缓存时间内不会重复请求http认证。
[root@localhost rabbitmq]# rabbitmq-plugins enable rabbitmq_auth_backend_cache
# 启用 cache 后,不需要直接指定 http 方式
auth_backends.1 = internal
auth_backends.2 = cache
# 缓存后端指定为 http
auth_cache.cached_backend = http
# 缓存时间,单位毫秒
auth_cache.cache_ttl = 10000
# 认证和授权地址,官方提供了 Spring Boot 示例
auth_http.user_path = http://192.168.1.102:19085/auth/user
auth_http.vhost_path = http://192.168.1.102:19085/auth/vhost
auth_http.resource_path = http://192.168.1.102:19085/auth/resource
auth_http.topic_path = http://192.168.1.102:19085/auth/topic
service rabbitmq-server restart