使用 OCI API 网关和 OpenID Connect 保护 Web 应用

将旧版 Web 应用程序与现代身份提供者集成通常需要修改旧版应用程序代码并更改用户界面。投资于一种体系结构,使您能够专注于业务逻辑,而不是验证流,而不是将时间和资源投入到新的定制开发中。

一些旧应用无法直接支持 OpenID Connect。在迁移到云时,您可以使用 Oracle Cloud Infrastructure (OCI) API 网关作为网络接入点来调解用户、身份提供商和应用程序的身份验证。OCI API 网关无需所有应用程序直接添加 OpenID Connect 流,可以在网络上以标准方式强制实施访问。开发人员可以使用 OCI API 网关实现原有应用的现代化,同时增强现代应用。

体系结构

OCI API 网关是 OCI 中的无服务器、完全托管的服务,可用于保护 API 端点和 Web 应用。OCI API 网关提供了安全功能,例如速率限制、授权实施、动态路由、SSL 实施等。可以使用 OCI API 网关保护需要 OpenID 验证支持的传统 Web 应用。OCI API 网关可以充当托管在 OCI 专用子网中的 Web 应用程序的集中安全模块。OCI API 网关与身份提供者无关,可以与任何受支持的 OAuth 2.0 提供程序(例如 Okta、Google、Amazon 和 Auth0)集成,以仅列出几个名称。

OpenID Connect 协议是位于 OAuth 2.0 协议之上的简单身份层。OpenID Connect 支持不同类型的应用程序,例如浏览器、移动应用程序和桌面客户端,以安全、集中和标准化的方式支持身份验证和身份管理。利用 OpenID Connect 协议的应用依靠身份提供者来安全地处理身份验证流程并验证用户身份。OpenID Connect 通过将用户管理集中到身份提供者(例如 Oracle Cloud Infrastructure Identity and Access Management ),为不同应用程序启用单点登录。

OCI API 网关充当用于调解用户、身份提供者和应用程序的验证的网络访问点。通过在应用程序和客户端之间放置 OCI API 网关OCI API 网关可以拦截请求并处理 OpenID Connect 授权流。

下图说明了此参考体系结构。



secure-web-applications-oci-api-gateway-open-id-architecture.zip

下图说明了初始授权的验证流。



secure-web-applications-oci-api-gateway-open-id-data-flow.zip

  1. 客户端应用通过 OCI API 网关请求访问后端服务。
  2. OCI API 网关将客户端定向到身份提供者。
  3. 客户机通过身份提供者进行验证。如果成功验证,客户机将接收提供授权的令牌。
  4. 身份提供者使用访问令牌将客户机重定向到 OCI API 网关
  5. OCI API 网关使用身份提供者验证访问令牌。
  6. 如果令牌验证成功, OCI API 网关将路由到相应的后端服务,并返回对客户端的已履行响应。

当已授权客户机时,流类似于下图。



secure-web-applications-oci-api-gateway-open-id-data-flow-authorized.zip

  1. 在获取令牌后,浏览器将高速缓存令牌,以获取对同一应用程序的后续请求。
  2. OCI API 网关使用身份提供者验证令牌,以确保客户端有权访问后端服务。
  3. 如果客户端已获授权, OCI API 网关将路由到相应的后端服务,并返回对客户端的已履行响应。

该体系结构具有以下组成部分:

  • 区域

    Oracle Cloud Infrastructure 区域是一个局部地理区域,包含一个或多个称为可用性域的数据中心。区域独立于其他区域,广阔的距离可以将其分开(跨国家甚至大陆)。

  • 可用性域

    可用性域是区域中的独立独立数据中心。每个可用性域中的物理资源与提供容错能力的其他可用性域中的资源隔离。可用性域不共享基础设施(例如电源或冷却设备)或内部可用性域网络。因此,一个可用性域出现故障不会影响区域中的其他可用性域。

  • 容错域

    故障域是可用性域内一组硬件和基础设施。每个可用性域都具有三个具有独立电源和硬件的故障域。在多个容错域中分配资源时,您的应用可以承受容错域中的物理服务器故障、系统维护和电源故障。

  • 虚拟云网络 (VCN) 和子网

    VCN 是您在 Oracle Cloud Infrastructure 区域中设置的可定制软件定义网络。与传统数据中心网络一样,VCN 允许您完全控制您的网络环境。一个 VCN 可以具有多个不重叠的 CIDR 块,您可以在创建 VCN 后对其进行更改。您可以将 VCN 细分为多个子网,这些子网可以限定到区域或可用性域。每个子网包含一系列不与 VCN 中的其他子网重叠的连续地址。创建后可以更改子网的大小。子网可以是公共子网,也可以是专用子网。

  • API 网关

    使用 Oracle API Gateway,您可以发布具有专用端点的 API,这些端点可通过网络访问,并且您可以根据需要向公共互联网公开。端点支持 API 验证、请求和响应转换、CORS、验证和授权以及请求限制。

  • 身份和访问管理 (IAM)

    Oracle Cloud Infrastructure Identity and Access Management (IAM) 是 Oracle Cloud Infrastructure (OCI) 和 Oracle Cloud Applications 的访问控制层。通过 IAM API 和用户界面,您可以管理身份域和身份域中的资源。每个 OCI IAM 身份域代表一个独立的身份和访问管理解决方案或不同的用户群体。

  • FastConnect

    Oracle Cloud Infrastructure FastConnect 提供了在您的数据中心与 Oracle Cloud Infrastructure 之间创建专用私有连接的简便方式。FastConnect 与基于 Internet 的连接相比,可提供更高的带宽选项和更可靠的网络体验。

  • OCI 和 Azure 互连

    Oracle Cloud 和 Microsoft Azure Interconnect 是 Oracle 的首个多云产品。它在世界各地的特定 Azure 和 Oracle Cloud Infrastructure (OCI) 数据中心之间提供直接网络连接。通过该服务,Azure 管理员和开发人员可以将应用连接到在 OCI 中运行的应用和服务,而无需创建专用链接或通过公共互联网发送应用流量。

建议

使用以下建议作为起点。您的要求可能不同于此处所述的体系结构。
  • OCI API 网关

    您可以利用 OCI API 网关公开 REST API,并为您的 Web 应用启用一次登入支持。OCI API 网关还可以指定为集中式安全模块,以便应用将安全实施负载转移到 OCI API 网关。这样可以显著降低与实施、维护和复杂性相关的成本。

考虑事项

部署此引用体系结构时,请考虑以下事项。

  • 跨站点请求伪造 (CSRF) 保护

    攻击者可以通过利用浏览器 Cookie 的存在使用户向 Web 应用程序(例如 OCI API 网关)提交意外的命令来挂载 CSRF 攻击。如果应用程序确定由于浏览器 cookie 存在而已成功验证用户,则应用程序将执行该命令并可能产生破坏性后果。

    定义类型为 OAuth 2.0 introspection endpoint 的验证策略和类型为 OAuth 2.0 的验证失败策略时,您可以指定 OCI API 网关如何存储使用 OpenID Connect 授权流获取的新 JWT 令牌。

    如果要将新的 JWT 令牌存储在会话 Cookie 中,请选择 Use cookies for session。为了防止潜在的 CSRF 攻击,当 OCI API Gateway 将令牌存储在会话 cookie 中时,它还会在 X-CSRF-TOKEN 响应标头中返回 CSRF 令牌。对 OCI API 网关 的后续请求(除来自 GET 请求外)除了会话 cookie 中的 JWT 标记外,还必须在 X-CSRF-TOKEN 请求标头中包含 CSRF 标记。

  • 跨源资源共享 (CORS)

    由于从 Web 浏览器通过 OCI API 网关重定向请求,因此应用程序中使用的 Web 应用程序和其他 REST API 可能需要支持 CORS。

浏览更多

详细了解如何使用 OCI API 网关和 OpenID Connect 保护 Web 应用。

查看以下附加资源:

确认

Authors :

  • Subburam Mathuraiveeran
  • Robert Wunderlich
  • Shyam Suchak