使用 Okta 作为 OAuth 2.0 服务器
演示如何使用 OAuth 2.0 协议和 Okta 作为授权服务器进行身份验证,并使用以下流程
- 通过浏览器访问管理 UI
遵循本指南的先决条件
- 拥有一个Okta 账户
- Docker
git clone https://github.com/rabbitmq/rabbitmq-oauth2-tutorial
。此 GitHub 存储库包含本示例中使用的所有配置文件和脚本
在 Okta UI 中创建您的应用集成
当使用**Okta 作为 OAuth 2.0 服务器**时,您的客户端应用(在本例中为 RabbitMQ)需要一种方法来信任**Okta OIDC 登录小部件**向其发出的安全令牌。
建立该信任的第一步是通过**在 Okta 中使用身份平台创建您的应用**。要了解有关 Okta 中应用注册的更多信息,请参阅Okta 文档。
登录到Okta中的帐户后,请按照以下步骤操作
- 在管理控制台中,转到应用程序。
- 点击创建应用集成。
- 要创建 OIDC 应用集成,请选择 OIDC - OpenID Connect 作为登录方法。
- 选择要与 Okta 集成的应用程序类型。选择 Web 应用程序、单页应用程序或原生应用程序。在我们的用例中,它是单页应用程序 (SPA)。
- 点击下一步。
OIDC 的应用集成向导包含三个部分
在常规设置中,提供以下信息
- **名称**:应用集成名称:为您的应用集成指定一个名称(例如:rabbitmq-oauth2)
- **授权类型**:选择**授权码**和**刷新令牌**
- 重定向 URI:
- 在**登录重定向 URI**中键入https://127.0.0.1:15672/js/oidc-oauth/login-callback.html
- 将**注销重定向 URI**配置为https://127.0.0.1:15672
在受信任来源(对于 Web 和原生应用集成)中,选择**保留默认值**。
在分配中,选择**允许组织中的所有人访问**。
最后,点击**保存**并记下以下值,因为您稍后需要它们来配置 RabbitMQ
- 客户端 ID
- Okta 域名
创建 Okta OAuth 2.0 授权服务器、范围和声明
授权服务器用于对用户进行身份验证并颁发可用于访问受保护资源的访问令牌。在 Okta 中,授权服务器可用于定义范围,范围本质上是确定用户可以访问哪些资源的权限。通过定义范围,您可以控制不同用户对资源的访问级别。
以下是使用 Okta 中的默认授权服务器为admin
和dev
组创建范围的步骤
-
登录到您的 Okta 帐户,然后导航到 Okta 控制台**安全->API**下的**授权服务器**选项卡。
-
点击提供的默认授权服务器。
-
点击**范围**选项卡,然后点击**添加范围**按钮。
-
输入
admin
作为范围的名称,并根据需要提供说明。 -
重复步骤 4 以创建
dev
的范围。 -
保存更改。
以下是为**角色**创建声明以在使用 Okta 中的默认授权服务器进行身份验证时区分admin
和dev
组的步骤
-
登录到您的 Okta 帐户,然后导航到 Okta 控制台**安全->API**下的**授权服务器**选项卡。
-
点击提供的默认授权服务器。
-
点击**声明**选项卡,然后点击**添加声明**按钮。
-
输入
role
作为声明的名称。 -
选择**访问令牌**作为包含在令牌类型中。
-
选择**表达式**作为值类型
-
在**值**字段中输入以下表达式:
isMemberOfGroupName("admin") ? "admin" : isMemberOfGroupName("monitoring") ? "monitoring" : ""
-
点击创建。
注意:上述表达式返回一个名为role
的声明,如果用户是admin
组的成员,则其值为admin
,如果用户是monitoring
组的成员,则其值为monitoring
创建组以允许访问管理 UI
-
登录到您的 Okta 管理仪表板,然后通过点击顶部菜单中的**组**选项卡导航到**组**页面。
-
点击页面右上角的**添加组**按钮。
-
在**添加组**对话框中,在**组名称**字段中输入组的名称。您也可以在**说明**字段中输入组的说明,但这可选。
-
如果您想立即向组添加成员,可以通过点击对话框**成员**部分中的**添加人员**按钮来执行此操作。您可以按姓名或电子邮件地址搜索用户,并通过选择其姓名并点击**添加**按钮将其添加到组中。
-
如果您想设置组规则,可以通过点击对话框中的**规则**选项卡来执行此操作。组规则允许您根据电子邮件域、职位或部门等条件自动向组添加或删除用户。
-
完成组配置后,点击**创建组**按钮创建组。
将应用和用户分配给组
下一步是将用户分配到 Okta 中的组,并授予他们对与该组关联的应用的访问权限。对于我们的用例,我们希望将某些用户分配到dev
和admin
组,并将rabbitmq-oauth2
应用分配给这两个组。
-
登录到您的 Okta 管理仪表板,然后通过点击顶部菜单中的**目录**选项卡,然后选择**人员**导航到**用户**页面。
-
找到要分配到组的用户,然后点击其姓名打开其用户配置文件。
-
在用户配置文件中,点击**组**选项卡以查看用户当前所属的组。
-
要将用户添加到组,请点击页面右上角的**添加组**按钮。从可用组列表中选择要将用户添加到其中的组,然后点击**添加**按钮将用户添加到组中。
-
要授予用户对与组关联的应用的访问权限,请导航到用户配置文件中的**应用程序**选项卡。找到要授予访问权限的应用,然后点击应用名称打开其设置。
-
在应用设置中,点击**分配**选项卡以查看当前分配给该应用的用户和组。
-
要将用户添加到应用,请点击页面右上角的**分配**按钮。从可用组列表中选择要将用户分配到的组,然后点击**分配**按钮将用户分配到该组的应用。
-
重复步骤 4-7 以将用户添加到任何其他组和应用。
将用户添加到相应的组和应用后,他们应该能够访问该应用以及与这些组关联的任何资源。
配置 RabbitMQ 以使用 Okta 作为 OAuth 2.0 身份验证后端
Okta 方面的配置已完成。您现在必须配置 RabbitMQ 以使用您刚刚创建的资源。
rabbitmq.conf 是一个 RabbitMQ 配置,用于**启用 okta 作为 RabbitMQ OAuth2 和管理插件的 OAuth 2.0 身份验证后端**。advanced.config 是将 RabbitMQ 范围映射到之前在 Okta 中配置的权限的 RabbitMQ 高级配置。
使用以下值更新它(您应该在前面的步骤中记下了这些值)
- 与您的 okta 域名关联的**okta-domain-name**。
- 与您在 okta 中为 rabbitMQ 注册的 okta 应用关联的**okta_client_app_ID**。
启动 RabbitMQ
运行以下命令以运行 RabbitMQ docker 镜像
export MODE=okta
make start-rabbitmq
验证 RabbitMQ 管理 UI 访问权限
转到 RabbitMQ 管理 UI https://127.0.0.1:15671
。根据您的浏览器,忽略安全警告(由于使用了自签名证书而引发)以继续。
在 RabbitMQ 管理 UI 页面上,点击**点击此处登录**按钮,使用您的**okta 用户**进行身份验证。
登录成功后,您将被重定向回 RabbitMQ 管理 UI。