跳到主要内容

OIDC 集成

·阅读时间:3 分钟

当我们使用 rabbitmq-managementrabbitmq_auth_backend_oauth2 插件时,目前唯一支持的授权服务器是 UAA,这使得连接其他 OAuth 2.0 服务器变得困难。此外,rabbitmq-management 插件使用的是 OAuth 2.0 隐式 流程,出于安全原因不再推荐使用。

RabbitMQ 3.11 将支持符合 OpenID Connect 和 OAuth 2.0 协议的几乎所有授权服务器。此外,OAuth 2.0 授权码授予 成为默认授予方式,隐式 授予不再支持。

概述

在 RabbitMQ 3.11 之前,在 Management UI 中使用 OAuth 2.0 时,RabbitMQ 仅支持 UAA 作为 OAuth 2.0 服务器,这是因为使用了 UAA 提供的 JavaScript 库。此外,该库仅支持 隐式 授予类型,并针对自定义 UAA 的 HTTP 端点,这些端点不遵循任何标准,例如 OpenID Connect。

RabbitMQ 3.11 将所有 OAuth 2.0 和 OpenID Connect 协议委托给 oidc-client-ts 库,不再依赖于 UAA 客户端库。随着这一变化,RabbitMQ 不再支持 隐式 授予类型,但现在支持 授权码 授予类型。此外,带有前缀 uaa_ 的旧设置(例如 uaa_location)已弃用,并被带有前缀 oauth_ 的一组新设置替换,如下一节 用法 中所述。

用法

要配置 rabbitmq-management 以使用任何 OAuth 2.0 服务器对用户进行身份验证,我们需要提供以下设置

  • oauth_enabled 替换 enable_uaa
  • oauth_client_id 替换 uaa_client_id
  • oauth_client_secret 包含与 oauth_client_id 对应的密钥。这是一个新的设置,因为 隐式 授予流程不需要密钥。
  • oauth_provider_url 替换 uaa_location。它是 OpenID Connect 端点 URL,RabbitMQ 通过该端点发现所有其他 OAuth 2.0 端点。

以下是用上述设置配置插件的示例配置

  { rabbitmq_management,
...

{oauth_enabled, true},
{oauth_client_id, "PUT YOUR AUTH CLIENT ID"},
{oauth_client_secret, "PUT YOUR AUTH CLIENT SECRET"},
{oauth_provider_url, "PUT YOUR OpenID Connect URL"}
...
}

除了上述四个必填设置外,还有一个可选设置

  • oauth_scopes 设置 RabbitMQ 代表访问 Management UI 的用户请求的 范围。默认值为 openid profile(当 enable_uaa 未设置或为 false 时),以及 openid profile <rabbitmq_auth_backend_oauth2.resource_server_id>.*(当 enable_uaa 为 true 时)。

我们什么时候需要设置 oauth_scopes

有些 OAuth 2.0 服务器可以在 RabbitMQ 在授权请求期间请求的范围无关的情况下,自动向用户授予 范围。如果您的 OAuth 2.0 服务器具有此功能,则无需在 oauth_scopes 中指定所有范围。

相反,如果您的 OAuth 2.0 服务器仅授予在授权请求期间请求的 范围,则必须在 oauth_scopes 设置中指定它们。

此更改如何影响现有集群?

只有当前配置为使用 UAA 进行身份验证的 RabbitMQ 集群会受到此更改的影响。除非进行这些更改,否则它们将停止工作

  • 添加 {oauth_enabled, true},
  • 添加 {oauth_client_secret, "UAA_CLIENT_SECRET"},,其中 UAA_CLIENT_SECRET 是与之前配置的 uaa_client_id 关联的客户端密钥。

但是,强烈建议对现有集群进行重新配置,以使用新的设置完全重新配置那些配置为使用 UAA 进行 OAuth 2.0 的集群,因为旧配置已弃用,将在未来版本中删除。

目前支持哪些 OAuth 2.0 服务器?

理论上,任何符合 OpenID Connect 规范的 OAuth 2.0 服务器都应该支持。RabbitMQ 已针对以下 OAuth 2.0 服务器进行了测试

  • Keycloak
  • Auth0
  • Azure Active Directory
© 2024 RabbitMQ. All rights reserved.