使用 https://auth0.com/ 作为 OAuth 2.0 服务器
本指南介绍如何为 RabbitMQ 设置 OAuth 2.0,并使用 Auth0 作为授权服务器,使用以下流程
- 通过浏览器访问 管理 UI
- 访问管理 REST API
- 应用程序身份验证和授权
遵循本指南的先决条件
- 在 https://auth0.com/ 中拥有一个帐户。
- Docker
- 本地克隆的 GitHub 存储库,其中包含本示例中使用的所有配置文件和脚本
创建 RabbitMQ API
在 Auth0 中,资源映射到应用程序 API。
- 在 https://auth0.com/ 中登录您的帐户后,转到**仪表盘 > 应用程序 > API > 创建 API**。
- 将其命名为
rabbitmq
。这里重要的是标识符
,它必须具有我们在 RabbitMQ 中配置的resource_server_id的名称。此标识符
进入audience
JWT 字段。在我们的例子中,它被称为rabbitmq
。 - 选择
RS256
作为签名算法。 - 启用**RBAC**。
- 启用**在访问令牌中添加权限**。
在 RabbitMQ API 中配置权限
-
编辑我们刚刚创建的名为
rabbitmq
的 API。 -
进入权限并添加此 api 可以授予的权限(范围)。您将添加以下范围
rabbitmq.read:*/*
rabbitmq.write:*/*
rabbitmq.configure:*/*
rabbitmq.tag:administrator
为管理 UI 创建 OAuth 客户端
默认情况下,对于我们创建的每个 API,都会使用 API 的 标识符
作为其名称创建一个应用程序。应用程序请求一个OAuth 客户端。
转到**仪表盘 > 应用程序**,您应该会看到您的应用程序已列出。应用程序为我们提供了一个client_id、一个client_secret和一个名为Domain的 HTTP 端点,用于声明令牌。
创建应用程序 rabbitmq-management
应用程序为我们提供了管理 UI 代表最终用户进行身份验证的 client-id 和 client-secret。
在设置中,选择
- 应用程序类型:
单页应用程序
- 令牌端点身份验证方法:
无
- 允许的回调 URL:
https://127.0.0.1:15672/js/oidc-oauth/login-callback.html
- 允许的 Web 来源:
https://127.0.0.1:15672
- 允许的来源(CORS):
https://127.0.0.1:15672
创建用于管理 UI 访问的用户
创建用户
- 转到**用户管理 > 用户**。
- 创建一个用户。这是您将通过管理 UI 登录的用户。
创建权限并授予它们
- 转到**角色**。
- 创建名为
rabbitmq.tag:administrator
的角色。 - 转到**权限**并选择所有权限。
- 转到**用户**,确保我们的用户已列出,否则将我们的用户添加到具有此角色的用户列表中。
配置 RabbitMQ 以使用 Auth0 进行身份验证
要配置 RabbitMQ,您需要从 Auth0 收集以下信息
- 转到**仪表盘 > 应用程序 > 应用程序**。
- 单击应用程序
rabbitmq-management
。 - 记下客户端 ID值
- 并记下域值
- 在 RabbitMQ 配置文件中使用客户端 ID和域字段中的最后一个值
编辑配置文件 conf/auth0/rabbitmq.conf 并将 {CLIENT_ID}
和 {DOMAIN}
替换为您上面收集的值。
启动 RabbitMQ
运行以下命令以启动 RabbitMQ
export MODE=auth0
make start-rabbitmq
验证管理 UI 流程
- 转到管理 UI
https://127.0.0.1:15672
。 - 单击单个按钮,使用您的辅助 Auth0 用户进行身份验证。您应该会被重定向回管理 UI。
Auth0 会发出如下所示的访问令牌。它在scope
声明中具有在management.oauth_scopes
中配置的请求范围,并且在permissions
声明中具有您在 Auth0 中为此用户配置的所有范围。RabbitMQ 从scope
声明以及在auth_oauth2.additional_scopes_key
中配置的声明名称(其值为permissions
)中读取范围。
{
"iss": "https://dev-tm5ebsbbdcbqddcj.us.auth0.com/",
"sub": "auth0|66d980b862efcd9f5144f42a",
"aud": [
"rabbitmq",
"https://dev-tm5ebsbbdcbqddcj.us.auth0.com/userinfo"
],
"iat": 1725533554,
"exp": 1725619954,
"scope": "openid profile rabbitmq.tag:administrator",
"azp": "IC1fqsSjkQq2cVsYyHUuQyq30OAYuUv2",
"permissions": [
"rabbitmq.configure:*/*",
"rabbitmq.read:*/*",
"rabbitmq.tag:administrator",
"rabbitmq.write:*/*"
]
}