跳到主要内容
版本:4.1

使用 auth0.com 作为 OAuth 2.0 服务器

本指南介绍如何为 RabbitMQ 设置 OAuth 2.0,并使用 Auth0 作为授权服务器,采用以下流程

  • 通过浏览器访问 管理 UI
  • 访问管理 HTTP API
  • 应用程序身份验证和授权

遵循本指南的先决条件

  • 拥有一个 Auth0 帐户
  • Docker
  • 一个 GitHub 仓库 的本地克隆,分支为 next,其中包含本示例中使用的所有配置文件和脚本。

创建 RabbitMQ API

在 Auth0 中,资源映射到应用程序 API。

  1. 登录 Auth0 帐户后,转到 仪表板 > 应用程序 > API > 创建 API
  2. 将其命名为 rabbitmq。这里重要的是 identifier,它必须具有我们在 RabbitMQ 中配置的 resource_server_id 的名称。此 identifier 进入 audience JWT 字段。在我们的例子中,它被称为 rabbitmq
  3. 选择 RS256 作为签名算法。
  4. 启用 RBAC
  5. 启用 在访问令牌中添加权限

在 RabbitMQ API 中配置权限

  1. 编辑我们刚刚创建的名为 rabbitmq 的 API。

  2. 进入权限并添加此 API 可以授予的权限(scope)。您将添加以下 scope

    • rabbitmq.read:*/*
    • rabbitmq.write:*/*
    • rabbitmq.configure:*/*
    • rabbitmq.tag:administrator

为管理 UI 创建 OAuth 客户端

默认情况下,对于我们创建的每个 API,都会使用 API 的 identifier 作为其名称创建一个应用程序。一个应用程序请求一个 OAuth 客户端

转到 仪表板 > 应用程序,您应该看到您的应用程序已列出。一个应用程序为我们提供一个 client_id,一个 client_secret 和一个名为 Domain 的 http 端点,用于声明令牌。

创建应用程序 rabbitmq-management

应用程序为我们提供了 client-id 和 client-secret,供管理 UI 代表最终用户进行身份验证。

在设置中,选择

  • 应用程序类型:Single Page applications
  • 允许的回调 URL:https://localhost:15671/js/oidc-oauth/login-callback.html
  • 允许的 Web Origin:https://localhost:15671
  • 允许的 Origin (CORS):https://localhost:15671

为管理 UI 访问创建用户

创建用户

  1. 转到 用户管理 > 用户
  2. 创建一个用户。这将是您用于通过管理 UI 登录的用户。

创建权限并授予它们

  1. 转到 角色
  2. 创建名为 rabbitmq.tag:administrator 的角色。
  3. 转到 权限 并选择所有权限。
  4. 转到 用户 并确保我们的用户已列出,否则将我们的用户添加到具有此角色的用户列表中。

配置 RabbitMQ 以使用 Auth0 进行身份验证

要配置 RabbitMQ,您需要从 Auth0 收集以下信息

  1. 转到 仪表板 > 应用程序 > 应用程序
  2. 单击应用程序 rabbitmq-management
  3. 记下 客户端 ID
  4. 并记下
  5. 在 RabbitMQ 配置文件中使用 客户端 ID 字段中的最后的值

克隆配置文件 conf/auth0/rabbitmq.conf.tmplrabbitmq.conf(与 rabbitmq.conf.tmpl 在同一文件夹中)。

编辑 rabbitmq.conf 并按如下步骤操作

  1. {Client ID} 替换为您上面收集的值。
  2. {Domain} 也是如此
重要提示

从 RabbitMQ 4.1.x 开始,您必须配置 RabbitMQ 以包含一个名为 audience 的 URI 参数,其值与 auth_oauth2.resource_server_id 的值匹配。

早期的 RabbitMQ 版本始终发送此 URI 参数。如果未配置此额外的 URI 参数,Auth0 将认为令牌无效,RabbitMQ 将显示“No authorized”错误。

这两行配置 使用值 rabbitmq 配置 audience 参数。

启动 RabbitMQ

运行以下命令以启动 RabbitMQ

export MODE=auth0
make start-rabbitmq

验证管理 UI 流程

  1. 转到管理 UI https://localhost:15671
  2. 单击单个按钮,使用您的辅助 Auth0 用户进行身份验证。您应该被重定向回管理 UI。

Auth0 发放如下所示的访问令牌。它在 scope 声明中具有在 management.oauth_scopes 中配置的请求 scope,并在 permissions 声明中具有您在 Auth0 中为此用户配置的所有 scope。RabbitMQ 从 scope 声明以及在 auth_oauth2.additional_scopes_key 中配置的声明名称(其值为 permissions)读取 scope。

{
"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:*/*"
]
}
© . All rights reserved.