跳至主内容
版本:4.2

auth0.com 用作 OAuth 2.0 服务器

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

  • 通过浏览器访问 管理界面
  • 访问管理 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 可以授予的权限(作用域)。您将添加以下作用域

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

为管理 UI 创建 OAuth 客户端

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

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

创建应用程序 rabbitmq-management

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

在设置中,选择

  • 应用程序类型:单页应用程序
  • 允许的回调 URL:https://:15671/js/oidc-oauth/login-callback.html
  • 允许的 Web 源:https://:15671
  • 允许的源 (CORS):https://: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.tmpl 并将其命名为 rabbitmq.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 将显示“无授权”错误。

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

启动 RabbitMQ

运行以下命令来启动 RabbitMQ

export MODE=auth0
make start-rabbitmq

验证管理 UI 流程

  1. 转到管理 UI https://:15671
  2. 单击单个按钮,使用您的辅助 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:*/*"
]
}
© . This site is unofficial and not affiliated with VMware.