注意:
- 此教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure Free Tier 。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间示例值。完成实验室时,请将这些值替换为特定于您的云环境的值。
使用 Microsoft Entra ID 使用 OAuth 和 OpenID Connect 保护 OCI API 网关
简介
Oracle Cloud Infrastructure (OCI) API Gateway 是 OCI 中的无服务器全托管服务,可用于保护 API 端点和 Web 应用。它提供了许多安全功能,例如速率限制、授权实施、动态路由、SSL 实施等。我们已经看到来自客户的许多请求,询问如何使用 Microsoft Entra ID OAuth 令牌来保护在 OCI API 网关后运行的 API,或者我们如何利用 Microsoft Entra ID 令牌来针对 OCI API 网关进行验证。有关 OCI API 网关验证的更多信息,请参阅验证令牌以向 API 部署添加验证和授权。
目标
- 使用 OAuth 和 OpenID Connect (OIDC) 集成 OCI API 网关和 Microsoft Entra ID。我们将了解如何使用 Microsoft Entra ID 令牌安全地通过 OCI API 网关进行身份验证。
先决条件
-
访问 OCI 和 Microsoft Entra ID 租户。
-
来自 Microsoft Entra ID 的 JSON Web Token (JWT),可以使用 Postman、curl 或任何其他 API 客户端检索此 JWT。
任务 1:将 Microsoft Entra ID 配置为 OAuth 身份提供者 (IdP)
在 Microsoft Entra ID 端,我们需要在 Microsoft Entra ID 中配置两个客户端应用程序:一个用于向 Microsoft Entra ID 验证,另一个客户端应用程序将用于在 Microsoft Entra ID 上公开 API,我们将使用客户端 ID 检索此公开 API 的令牌,客户端 ID 是通过 Postman 获取第一个应用程序的密钥。我们将检查此令牌,并使用要在 OCI API 网关配置中导入的受众 (aud) 和发布者字段。
要在 Microsoft Entra ID 上创建和设置两个客户端应用程序,请执行以下步骤:
-
要创建第一个应用程序,请打开 Microsoft Entra ID 门户,单击应用程序注册和新建注册以注册新应用程序。
-
输入以下信息,然后单击注册。
- 名称:输入应用程序名称。
- 支持的帐户类型:选择仅此组织目录中的帐户(仅默认目录 - 单租户)。
-
单击公开 API 可通过添加应用程序 ID URI 将此内容公开给客户端应用程序,然后单击添加范围以添加范围。对于本教程,我们提供了以下图像中所示的测试值,以公开 API 和添加范围。
通过注册 Web API 并通过范围公开它,分配应用程序角色,您可以向访问您的 API 的授权用户和客户端应用程序输入对其资源的基于权限的访问。
注:记下应用程序 ID URI,这将在以后从 Microsoft Entra ID 获取令牌时使用。
-
单击应用程序角色可添加应用程序角色,即第一个应用程序的角色。
-
要创建第二个应用程序,请打开 Microsoft Entra ID 门户,单击应用程序注册和新建注册以注册新应用程序。
-
输入以下信息,然后单击注册。
- 名称:输入应用程序名称。
- 支持的帐户类型:选择仅此组织目录中的帐户(仅默认目录 - 单租户)。
-
请注意应用程序(客户端)ID ,因为我们将使用它作为令牌生成 API 中的凭证来获取作为 API 公开的第一个客户端应用程序的令牌。
-
单击证书和密钥、新建客户端密钥,然后输入以下信息,然后单击添加。
- 说明:输入短密钥说明。
- 失效:选择失效。默认情况下,密钥的到期时间设置为六个月。
注:通过复制值字段记下密钥。
密钥将与上面的应用程序(客户端)ID 成对。
-
单击 API 权限并添加
Api_App
的权限。在选择 API 部分中,选择我的组织使用的 API 并选择在配置第一个应用程序时公开的 API。 -
选择应用程序权限和公开的权限,然后单击添加权限。
-
单击概述、端点并复制 OAuth 2.0 标记端点 (v1) URL,该 URL 将用于发布 JWT 标记。
-
在端点中,我们将获取包含远程 JWKS URI 的已知 OpenID 端点 URL。
我们使用 Microsoft Entra ID 部分完成,现在我们开始配置 OCI API 网关。However, before configuring the API Gateway in OCI, we will collect the necessary details from the JWT and the openid-configuration
from Microsoft Entra ID using Postman.我们需要收集以下详细信息:
- JWT 颁发者:这可以从标记中的标记
iss
字段中获取。 - JWT 允许的受众:这也从令牌中的令牌
aud
字段获取。 - 远程 JWKS URI:可从 OpenID Connect 元数据文档中获取。这是远程 JWKS URI:
https://login.microsoftonline.com/{tenant-id}/discovery/v2.0/keys
。
使用 Postman 从 Microsoft Entra ID 获取访问令牌。请注意范围值,它应该是您在 Api_App 的公开 API 部分下创建的应用程序 ID URI,并将 /.default
添加到末尾,如下图中所示。
使用 Postman 从 Microsoft Entra ID 检索 JWT 标记。输入令牌 API URL https://login.microsoftonline.com/{tenant-id}/oauth2/token
,同时使用 Azure 租户 ID 替换 {tenant-id}
。发送请求并复制 access_token
值。
现在,我们可以解码 JWT 令牌来获取一些值,如 JWT 允许的发布者和 JWT 允许的受众。
对于在 OCI API Gateway 下配置的库存响应,我们将使用 Microsoft Entra ID 发出的 JSON Web Token (JWT)。
任务 2:配置 OCI API 网关
-
转到 OCI API Gateway,然后在验证部分下选择单一验证并输入以下信息。
- 验证类型:
OAuth 2.0/ OpenID Connect
。 - 标记位置:
Header
。 - JWT 令牌标头名称:
Authorization
。 - 验证方案:
Bearer
。
- 验证类型:
-
在其他 JWT 验证部分中,定义允许的发行人和受众。由于我们使用了 v1 令牌 API,因此允许的发布者应设置为
https://sts.windows.net/{tenant-id}/
。将{tenant-id}
替换为 Azure 租户 ID。允许的受众应包含任务 1 中获得的aud
声明值。 -
在验证类型部分中,输入从已知 OpenID 端点的 Microsoft Entra ID 获取的 JWKS URI。
-
要创建路由,请输入以下信息,然后单击下一步。
- 路径:定义路径。
- 方法:选择一个方法。
- 选择 Add a single backend 。
- 后端类型:选择库存回应。
- 状态代码:输入状态代码。
- 正文:定义简单正文。
注:为了简单起见,我们将库存响应公开为 API 网关的后端类型。这通常是通过 API Gateway 保护的 API,但 Microsoft Entra ID OIDC 验证的配置类似。
-
在复查部分中,复查部署并单击创建。等待部署处于
Active
状态并复制端点 URL。
使用 Postman 测试受保护的 API 端点。输入端点并使用路由路径为其添加后缀。添加 Authorization 标头,使用 Bearer 方案,并粘贴从 Microsoft Entra ID 获取的 JWT 标记。
您的 OCI API 网关部署现在使用 Microsoft Entra ID 进行保护。
相关链接
确认
- 作者 - Aqib Javid Bhat(高级云工程师)
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Use Microsoft Entra ID to Secure OCI API Gateway Using OAuth and OpenID Connect
F94684-01
March 2024