跳至主内容
版本:4.2

使用显式正向代理和 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.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 部署在其自己的名为 keycloak_net 的网络中:

PROVIDER_NETWORK=keycloak_net make start-keycloak

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

有一个名为 Test 的专用Keycloak 领域,配置如下:

启动正向代理

通过运行以下命令,将正向代理部署在 keycloak_netrabbitmq_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
© . This site is unofficial and not affiliated with VMware.