跳到主要内容
版本:4.1

身份验证/授权缓存后端

概述

此插件提供了一种缓存身份验证和授权后端结果的方法,缓存时间可配置。它不是一个独立的身份验证后端,而是一个现有后端(例如内置后端、LDAPHTTP 后端)的缓存层。虽然它对于内置(内部)身份验证和授权后端不是非常有用,但对于使用网络请求的其他后端(例如 LDAP 或 HTTP)可能很有用。

缓存过期目前是基于时间的。

目录

安装

rabbitmq_auth_backend_cache 插件随 RabbitMQ 一起发布。

像所有插件一样,它必须启用才能使用,例如,使用rabbitmqctl

rabbitmq-plugins enable rabbitmq_auth_backend_cache

授权和身份验证后端配置

要配置此插件以使其缓存所有授权和身份验证决策,首先将此缓存后端设置为 auth_backends 或其中之一,然后配置实际缓存的身份验证后端。

例如,要缓存对 http 后端的请求

auth_backends.1 = cache
auth_cache.cached_backend = http

auth_http.http_method = post

可以使用不同的后端进行授权和身份验证。

以下示例配置插件使用 LDAP 后端进行身份验证,但使用内部后端进行授权

auth_backends.1 = cache

auth_cache.cached_backend.authn = ldap
auth_cache.cached_backend.authz = internal

基本缓存配置

您可以配置缓存项的 TTL,通过使用 cache_ttl 配置变量,以毫秒为单位指定。默认值为 15000 毫秒

auth_cache.cached_backend = ldap
auth_cache.cache_ttl = 5000

默认情况下,负面的身份验证和/或授权决策不会被缓存,只有正面的决策会被缓存。但是,可以通过将 cache_refusals 设置为 true 来更改此行为,如下所示

auth_cache.cache_refusals = true

高级缓存配置

您还可以使用自定义缓存模块来存储缓存的请求。此模块应为实现 rabbit_auth_cache 行为的 Erlang 模块,并且(可选)定义 start_link 函数以启动缓存进程。

此存储库提供了几种实现

  • rabbit_auth_cache_dict 将缓存条目存储在内部进程字典中。此模块仅用于演示,不应在生产环境中使用。
  • rabbit_auth_cache_ets 将缓存条目存储在 ETS 表中,并使用计时器进行缓存失效。这是默认实现
  • rabbit_auth_cache_ets_segmented 将缓存条目存储在多个 ETS 表中,并且不删除单个缓存项,而是使用单独的进程进行垃圾回收。
  • rabbit_auth_cache_ets_segmented_stateless 与之前的相同,但最少使用 gen_server 状态,使用 ets 表来存储有关段的信息。

要指定用于缓存的模块,请使用 cache_module 配置键。此示例配置配置了 rabbit_auth_backend_ets_segmented 模块。

auth_cache.cache_module = rabbit_auth_backend_ets_segmented

当使用 cache_module 的自定义实现时,您可以使用 cache_module_args 指定 start argsStart args 应该是传递给模块 start_link 函数的参数列表。

但是,其他缓存模块参数只能通过 advanced.config 定义。

[
{rabbit, [
%% ...
]},

{rabbitmq_auth_backend_cache, [
{cache_module, rabbit_auth_backend_ets_segmented},
{cache_module_args, [10000]}
]}
].

如何清除缓存

可以使用 rabbitmqctl 命令 clear_auth_backend_cache 清除所有集群节点上的缓存

rabbitmqctl clear_auth_backend_cache
© . All rights reserved.