跳至主内容

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 之前,当与管理 UI 一起使用 OAuth 2.0 时,RabbitMQ 由于使用了 UAA 提供的 JavaScript 库,仅支持 UAA 作为 OAuth 2.0 服务器。此外,该库仅支持 *隐式* 授权类型,并指向自定义 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 代表访问管理 UI 的用户请求的 *范围*。当 enable_uaa 未设置或为 false 时,默认值为 openid profile;当 enable_uaa 为 true 时,默认值为 openid profile <rabbitmq_auth_backend_oauth2.resource_server_id>.*

何时需要设置 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
© . This site is unofficial and not affiliated with VMware.