使用显式正向代理和 Keycloak 作为 OAuth 2.0 服务器
要运行此示例,您需要使用商业版 Tanzu RabbitMQ docker 镜像。正向代理的支持是一项商业功能。
本指南介绍如何为 RabbitMQ 设置 OAuth 2.0,通过显式正向代理访问授权服务器。
- 通过 OAuth2 Proxy 使用浏览器访问 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 部署在其自己的名为 keycloak_net 的网络中:
PROVIDER_NETWORK=keycloak_net make start-keycloak
要访问 Keycloak 管理 UI,请转至 https://keycloak:8443/,然后输入 admin 作为用户名和密码。
有一个名为 Test 的专用Keycloak 领域,配置如下:
- 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 部署在其自己的网络 rabbitmq_net 中,并通过运行以下命令启动它:
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://:15671/api/overview client_id=mgt_api_client secret=LWOuYqJ8gjKg3D2U8CJZDuID3KiRZVDa realm=test