使用 OCI API Gateway 與 OpenID Connect 保護 Web 應用程式

將傳統 Web 應用系統與現代身分識別提供者整合,通常需要修改舊版應用程式程式碼和變更使用者介面。投資可讓您專注於業務邏輯而非認證流程的架構,而非花費時間和資源建立新的自訂開發。

某些舊版應用程式無法直接支援 OpenID Connect。隨著他們搬移至雲端,您可以使用 Oracle Cloud Infrastructure (OCI) API 閘道作為網路存取點,以調解使用者、身分識別提供者及應用程式的認證。OCI API Gateway 不需要所有應用程式直接新增 OpenID Connect 流程,而是能以網路標準化的方式強制存取。開發人員可以使用 OCI API Gateway 將傳統應用程式現代化,同時增強現代應用程式。

架構

OCI API Gateway 是 OCI 中無伺服器、完全受管理的服務,可用來保護 API 端點和 Web 應用程式。OCI API Gateway 提供安全性功能,例如速率限制、授權強制執行、動態路由、SSL 強制實行等等。OCI API Gateway 可用於保護需要 OpenID 認證支援的舊版 Web 應用程式。OCI API Gateway 可以作為 OCI 專用子網路中代管之 Web 應用系統的集中式安全模組。OCI API Gateway 支援各種身分識別提供者,可與任何支援的 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 Gateway 要求存取後端服務。
  2. OCI API 閘道會將從屬端導向身分識別提供者。
  3. 從屬端會向身分識別提供者進行認證。如果順利認證,從屬端就會收到提供授權的權杖。
  4. 身分識別提供者使用存取權杖將從屬端重新導向至 OCI API Gateway
  5. OCI API 閘道會以身分識別提供者驗證存取權杖。
  6. 如果權杖驗證成功, OCI API Gateway 會遞送至適當的後端服務,並傳回已履行的從屬端回應。

當某個用戶端被授權時,此流程會類似下圖。



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

  1. 取得權杖之後,瀏覽器會快取權杖,以處理對相同應用程式的後續要求。
  2. OCI API 閘道會以身分識別提供者驗證權杖,以確保從屬端能夠存取後端服務。
  3. 如果用戶端經過授權, OCI API Gateway 會路由至適當的後端服務,並傳回已履行的用戶端回應。

架構具有下列元件:

  • 區域

    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 提供與網際網路型連線比較的高頻寬選項,以及更可靠的網路體驗。

  • OCI 與 Azure 相互連線

    Oracle Cloud 和 Microsoft Azure Interconnect 是 Oracle 首款多雲產品。它在世界各地的特定 Azure 和 Oracle Cloud Infrastructure (OCI) 資料中心之間提供直接網路連線。它可讓 Azure 管理員和開發人員將應用程式連線至在 OCI 中執行的應用系統和服務,而無需建立專屬連結,或在公用網際網路傳送應用程式流量。

建議

使用下列建議作為起點。您的需求可能與此處所述的架構不同。
  • OCI API 閘道

    您可以利用 OCI API 閘道公開 REST API,並為 Web 應用系統啟用單一登入支援。OCI API Gateway 也可以指定為集中式安全模組,讓應用程式將安全實作卸載至 OCI API Gateway 。將實行、維護及複雜度相關的成本降到最低。

注意事項

部署此參考架構時,請考量下列事項。

  • 跨網站要求偽造 (CSRF) 保護

    攻擊者可以利用瀏覽器 Cookie 的存在來掛載 CSRF 攻擊,以讓使用者將非預期的命令送出至 Web 應用程式,例如 OCI API Gateway 。如果應用程式判斷使用者已經因為瀏覽器 Cookie 的存在而成功通過認證,則應用程式會執行具有潛在損害後果的指令。

    定義類型為 OAuth 2.0 introspection endpoint 的驗證原則以及類型為 OAuth 2.0 的驗證失敗原則時,您可以指定 OCI API Gateway 如何儲存使用 OpenID Connect 授權流程取得的新 JWT 記號。

    若要將新的 JWT 記號儲存在階段作業 Cookie 中,請選取 Use cookies for session。為了避免潛在的 CSRF 攻擊,當 OCI API Gateway 將權杖儲存在階段作業 Cookie 中時,它也會傳回 X-CSRF-TOKEN 回應標頭中的 CSRF 權杖。OCI API Gateway (從 GET 要求出發) 的後續要求除了階段作業 Cookie 中的 JWT token 之外,還必須在 X-CSRF-TOKEN 要求標頭中包含 CSRF 記號。

  • 跨源資源共享 (CORS)

    應用程式中使用的 Web 應用程式和其他 REST API 可能需要支援 CORS,因為要求是透過 Web 瀏覽器的 OCI API Gateway 重新導向。

探索更多

深入瞭解如何使用 OCI API Gateway 和 OpenID Connect 保護 Web 應用程式。

檢閱下列額外資源:

確認書

作者

  • Subburam Mathuraiveeran
  • Robert Wunderlich
  • Shyam Suchak