使用显式正向代理和 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.issuer
或auth_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
,配置如下
- rsa 签名密钥
- [rsa 提供程序]https://keycloak:8443/admin/master/console/#/realms/test/keys/providers)
rabbitmq-proxy-client
客户端
启动正向代理
通过运行以下命令,在两个网络 keycloak_net
和 rabbitmq_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