博客 | NGINX

使用 NGINX 和 Azure Active Directory 进行安全 API 访问

NGINX-F5-horiz-black-type-RGB 的一部分
Cody Green 缩略图
科迪·格林
2022 年 10 月 6 日发布

API 在应用连接中发挥着关键作用,但也容易受到攻击。 过去,对于单片应用程序,只有一个入口点需要保护。 在微服务架构中,单个应用程序通常由通过 API 连接的多个微服务组成,每个 API 可能有数百个端点。 这使得 API 的潜在攻击面变得非常巨大,每个新的 API 都会在您的安全边界中创建一个入口点。

有很多策略可以保护您的 API。 最基本的其中之一就是访问控制。 简单地说,您必须验证用户的身份(身份验证,或 AuthN)并确认他们可以访问某些资源(授权,或 AuthZ)。 实施 OpenID Connect (OIDC) 是用于 API 的最常见访问控制方法之一。 您可以使用API 连接管理器F5 NGINX 管理套件的一部分)在几分钟内启动并运行它。

在本教程中,您将学习如何通过使用 API Connectivity Manager 和Azure Active Directory (Azure AD) 设置 JSON Web 令牌 (JWT) 验证来执行 OIDC 工作流的授权部分。

什么是 OpenID Connect?

OpenID Connect (OIDC)是一种建立在OAuth 2.0协议之上的身份协议。 OIDC 允许客户端验证最终用户或设备的身份。 这是访问控制的一部分,其中包括身份验证和授权:

  • 身份验证可验证用户或设备是否为其所声称的身份
  • 授权决定经过验证的用户或设备可以访问哪些内容

OIDC 有许多不同的实现,包括 Azure AD,您将在本教程中使用它。 或者,您可以将其他 OIDC 解决方案(例如 F5 BIG-IP 访问策略管理器 (APM)、Okta、Auth0、Ping Identity 等)与 API 连接管理器结合使用。

入门所需

确保您满足以下先决条件:

如果您需要访问 API 连接管理器,可以注册NGINX 管理套件 30 天免费试用版

创建 Azure ADapplication

打开浏览器并登录到您的Azure 门户

点击左侧菜单中的应用程序注册

Azure AD 门户主页

图 1: Azure AD 门户主页

点击新注册按钮。

Azure AD 应用注册

图 2: Azure AD 应用注册

要创建新的应用,请提供名称重定向 URI ,然后单击“注册”按钮。 在此演示中,您将利用Postman ,因此您将使用Postman OIDC 重定向 URI

创建新的 Azure AD 应用

图 3: 创建新的 Azure AD 应用

现在您的应用已创建,您需要创建 OAuth 范围以提供对 API 的访问。单击左侧菜单中的公开 API链接。

公开 API

图4: 公开 API

单击“添加范围”

添加范围

图5: 添加范围

接受默认的applicationID URI 或创建您自己的 URI,然后单击“保存并继续”按钮。 如果您想创建自己的applicationID URI,则必须使用 Azure AD 注册所需的域。

applicationID 网址

图6: applicationID 网址

对于此演示,您的范围基于 Microsoft示例。 填写表格中的以下信息,然后单击“添加范围”按钮:

范围名称: 员工.阅读.全部
谁可以同意?: 管理员和用户
管理员同意显示名称: 员工记录的只读访问权限
管理员同意说明: 允许对所有员工数据进行只读访问。
用户同意显示名称: 以只读方式访问您的员工记录
用户同意说明: 允许对您的员工数据进行只读访问。

添加范围

图 7: 添加范围

接下来,您需要授权客户端应用。 为此,请获取客户端 ID。单击左侧菜单中的“概览”链接并复制应用(客户端)ID

application客户端 ID

图 8: application客户端 ID

再次单击“公开 API”链接,然后单击“添加客户端应用”按钮。

添加客户端application

图 9: 添加客户端application

将应用客户端 ID 粘贴到客户端 ID 字段中,然后选中应用ID URI 旁边的复选框。然后点击添加应用按钮。

添加客户端application

图 10: 添加客户端application

接下来,对于此演示,您将利用带有授权码流的授权码,因此 Postman 需要客户端密钥。 单击左侧菜单中的“证书和机密”链接,然后单击“新客户端机密”按钮。

新客户机密

图 11: 新客户机密

命名您的机密并保留默认的到期时间。

秘密名称

图 12: 秘密名称

接下来,复制您的客户端密钥并将其存储在密码库中,以便您以后使用。

客户端机密

图 13: 客户端机密

在 API 连接管理器中配置 JWT 断言

现在您已配置 Azure AD应用,您可以在 API 连接管理器中设置 API 网关集群,以便为您定义的服务执行 JSON Web 令牌断言。 在此步骤中,您需要确定 Azure AD 租户的JSON Web 密钥 (JWK) 集的 URI。

您可以从 Azure AD 租户的已知终结点Azure AD tenant’s well-known endpoint
https://login.microsoftonline.com/<tenant-id>/v2.0/.well-known/openid-configuration

此页面将提供包含jwks_uri键的 JSON 有效负载。 您将需要复制其值。

Azure AD 租户已知终结点Azure AD Tenant Well-Known Endpoint

图 14: Azure AD 租户已知终结点Azure AD Tenant Well-Known Endpoint

现在您有了 JWKS URI,请打开 API 连接管理器控制台并导航到服务代理的配置。 单击JSON Web Token 断言策略的添加策略

网关服务代理策略

图 15: 网关服务代理策略

接下来,将 Azure AD 租户的 JKWS URI 粘贴到URI 位置字段中,然后单击添加按钮。

JSON Web 令牌断言策略

图 16: JSON Web 令牌断言策略

单击“保存并发布”按钮将此策略推送到您的 API 网关集群。

服务网关策略

图 17: 服务网关策略

就是这样! 您的 API 连接管理器实例现已配置为在配置的服务网关上执行 JWT 断言。

使用 Postman 进行测试

现在,是时候测试您的设置并确保它按预期运行了。 首先,您需要从 Azure ADapplication获取一些信息:

  • application客户端密钥(您之前已保存)
  • OAuth 范围
  • OAuth 授权端点
  • OAuth 令牌端点

要获取 OAuth 范围,请打开您的 Azure 门户并导航回您的应用注册页面。 接下来,单击左侧菜单中的“显示 API”链接,然后单击范围的复制”符号。 保存此值以便您可以在几分钟后使用它。

API 范围

图 18: API 范围

要获取 OAuth 授权和令牌端点,请单击左侧菜单中的概述链接,然后单击端点按钮。 之后,复制授权和令牌端点 URI。

Azure ADapplication终结点Azure AD Application Endpoints

图 19: Azure ADapplication终结点Azure AD Application Endpoints

Azure ADapplication端点 URL

图 20: Azure ADapplication端点 URL

打开 Postman 并点击环境菜单。 然后,单击创建环境链接。

Postman 创建环境

图 21: Postman 创建环境

命名您的环境并将六个变量及其值(从前面的步骤中保存)添加到初始值列和当前值列中,然后单击保存按钮。

  • 客户端 ID Azure AD 应用程序的客户端 ID
  • 客户端机密 Azure AD 应用程序的客户端机密
  • 身份验证网址: Azure AD 租户的 OAuth 授权 URL
  • token_url : Azure AD 租户的 OAuth 令牌 URL
  • 租户 ID : Azure AD 目录(租户)ID
  • 范围: Azure AD 应用程序的 API 范围以及applicationID URL

Postman 环境变量

图 22: Postman 环境变量

在 Postman 中打开一个新选项卡并按照以下步骤操作:

  • 在右上角将您的环境更改为ACM
  • 将您的 API URL 添加到地址栏
  • 点击“身份验证”选项卡
  • 类型更改为 OAuth 2.0
  • 在 Auth 配置中向下滚动并设置以下变量:
    • 认证 URL: {{auth_url}}
    • 访问令牌 URL: {{token_url}}
    • 客户端 ID: {{client_id}}
    • 客户端机密: {{client_secret}}
  • 点击获取新访问令牌按钮

Postman 请求

图 23: Postman 请求

Postman Auth 配置

图 24: Postman Auth 配置

将打开一个浏览器窗口,并提示您使用 Azure AD 凭据登录。 一旦您成功验证,您将被重定向回 Postman,并会出现以下窗口。 单击使用令牌按钮。

Postman 使用令牌

图 25: Postman 使用令牌

现在您有了 OAuth 访问令牌,最终可以进行 API 调用了。 单击“保存”按钮,然后单击“发送”按钮。

如果一切配置正确,您应该会看到 200 OK 响应。

Postman 成功请求

图 26: Postman 成功请求

结论

您现在可以使用 API 连接管理器使用 Azure AD OAuth 访问令牌保护您的 API。 下一步是添加额外的 OAuth 范围并在 API Connectivity Manager 中配置 API 网关集群以将这些范围传递给受保护的 API - 但这是另一篇文章的主题!

立即开始

开始30 天免费试用NGINX 管理套件,其中包括 API 连接管理器和实例管理器

该文章的版本最初出现在codygreen.com。 经作者许可,本文进行了编辑并转载。


“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”