跳转至主要内容
版本: 4.1

使用显式正向代理和 Keycloak 作为 OAuth 2.0 服务器

警告

要运行此示例,您需要使用商业版 Tanzu RabbitMQ Docker 镜像正向代理支持是一项商业功能。

本指南解释了如何设置 RabbitMQ 的 OAuth 2.0,以便通过显式正向代理访问授权服务器。

  • 通过 OAuth2 代理使用浏览器访问 RabbitMQ 管理 UI
                    [ Keycloak ]  
/|\
|
2.http request (*) | [ RabbitMQ ]
[ forward-proxy ] <----1. http request (*)--- [ http ]

在以下任何情况下,RabbitMQ 都会通过正向代理与 Keycloak 建立 HTTP 连接

  • 您已配置 auth_oauth2.issuer,以便 RabbitMQ 通过 OpenID 发现端点下载 OpenID 配置。
  • 您已配置 auth_oauth2.issuerauth_oauth2.jwks_url,以便 RabbitMQ 下载令牌的签名密钥。

使用带有正向代理的 OAuth 2 的先决条件

  • Docker
  • make
  • GitHub 仓库 的本地克隆,分支为 next,其中包含本示例中使用的所有配置文件和脚本。
  • 您的 /etc/hosts 文件中的以下条目。如果没有这些条目,您将在浏览器中收到 DNS 错误。
localhost keycloak rabbitmq forward-proxy
信息

make start-keycloak 将生成必要的 TLS 证书和私钥。这些证书具有到期日期。

如果您看到任何提示证书过期或无效的错误消息,请停止 Keycloak,运行 make clean-certs 以重新生成证书和私钥,然后重新启动 Keycloak 和代理。

部署 Keycloak

通过运行以下命令,在其自己的网络 keycloak_net 上部署 Keycloak

PROVIDER_NETWORK=keycloak_net make start-keycloak

要访问 Keycloak 管理 UI,请访问 https://keycloak:8443/ 并输入 admin 作为用户名和密码。

有一个专用的 Keycloak realm 称为 Test,配置如下

启动正向代理

通过运行以下命令,在两个网络 keycloak_netrabbitmq_net 中部署并启动正向代理

PROVIDER_NETWORK=keycloak_net make start-forward-proxy

正向代理通过使用 httpd.conf 进行配置。这种类型的配置将访问令牌插入到 HTTP Authorization 标头中。

启动 RabbitMQ

通过运行以下命令,在其自己的网络 rabbitmq_net 中部署 RabbitMQ 并启动它

export IMAGE=<Tanzu RabbitMQ OCI image name>
export IMAGE_TAG=<Tanzu RabbitMQ OCI image tag>
MODE=forward-proxy OAUTH_PROVIDER=keycloak make start-rabbitmq

访问 管理 UI

访问 https://rabbitmq:15671/,继续登录,并在 Keycloak 提示您时输入用户名 rabbit_admin 和密码 rabbit_admin。您将被重定向回 RabbitMQ 管理 UI。

在浏览器中运行的管理 UI 直接连接到 Keycloak。换句话说,它不通过正向代理。如果您希望管理 UI 通过正向代理,则必须配置浏览器。这超出了本示例的范围。

但是,为了验证管理 UI 从 Keycloak 收到的令牌,RabbitMQ 必须通过正向代理连接到 Keycloak。这对于下载签名密钥以及仅配置了 issuer URL 的情况下下载 OpenID 配置是必要的。

访问管理 API

要访问管理 API,请运行以下命令。它使用客户端 mgt_api_client,它具有作用域 rabbitmq.tag:administrator

make curl-keycloak url=https://localhost:15671/api/overview client_id=mgt_api_client secret=LWOuYqJ8gjKg3D2U8CJZDuID3KiRZVDa realm=test
© . All rights reserved.