OIDC 集成
今天,当我们使用 rabbitmq-management 和 rabbitmq_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 时,由于使用了 UAA 提供的 JavaScript 库,RabbitMQ 仅支持将 UAA 作为 OAuth 2.0 服务器。此外,该库仅支持隐式 (implicit) 授权类型,且针对的是自定义的 UAA HTTP 端点,这些端点并不遵循 OpenID Connect 等任何标准。
RabbitMQ 3.11 将所有 OAuth 2.0 和 OpenID Connect 协议委托给 oidc-client-ts 库,不再依赖 UAA 客户端库。通过此更改,RabbitMQ 不再支持隐式 (implicit) 授权类型,转而支持授权码 (authorization code) 授权类型。此外,前缀为 uaa_ 的旧设置(如 uaa_location)已被弃用,并由前缀为 oauth_ 的新设置集取代,具体说明见下一节 用法 (Usage)。
用法
要配置 rabbitmq-management 以使用任何 OAuth 2.0 服务器对用户进行身份验证,我们需要提供以下设置:
oauth_enabled取代enable_uaaoauth_client_id取代uaa_client_idoauth_client_secret包含与oauth_client_id对应的密钥。这是一项新设置,因为隐式 (implicit) 授权流程不需要密钥。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 代表访问管理界面的用户所请求的作用域 (scopes)。当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
