Kong HMAC Auth Plugin:筆記與適用場景分析

前言 最近工作上在研究 API 認證方案,整理了一個 Kong HMAC Demo 來驗證 HMAC-SHA256 作為 Kong API Gateway 認證機制的可行性。趁還沒忘掉,記錄一下核心觀念與適用場景。 什麼是 HMAC HMAC(Hash-based Message Authentication Code)是一種利用雜湊函數(如 SHA-256)與共享金鑰(shared secret)產生訊息鑑別碼(MAC)的機制。 實際在 HTTP 請求中,client 會選取特定 header(例如 Date),以金鑰對其進行 HMAC 運算,產生 signature,再附在 Authorization header 中送出。 Authorization: hmac username="demo-user", algorithm="hmac-sha256", headers="date", signature="<base64-encoded-signature>" 為什麼 HMAC 可以作為身份驗證 HMAC 能作為身份驗證的核心原因在於:只有持有正確金鑰的人,才能產生出合法的 signature。 驗證流程如下: Client 計算簽章: Client 使用共享金鑰對指定 headers 計算 HMAC 簽章,附在請求中送出。 Server 重算比對: Server(這裡是 Kong)收到請求後,根據 username 找到對應的 consumer 及其 secret,對相同的 headers 重新計算一次 HMAC。 比對結果: 若兩端計算出的 signature 一致,代表請求方持有正確金鑰,身份即可確認。 防重放攻擊: Kong 的 HMAC plugin 要求簽章必須包含 Date header,並設定允許的時間偏移(clock skew)。若請求的時間戳記超出允許範圍(預設 ±300 秒),Kong 會直接拒絕請求,防止攻擊者截取請求後重放。 ...

March 8, 2026 · 2 分鐘

Azure Apim 初探-從 Kong 角度來理解

最近因為有需求,需要了解一下 Azure APIM 的用法,初步整理一下,從 Kong 的角度來理解新東西。 設定 API 從 Kong 的觀念來理解 Azure APIM 對應之概念 Kong Azure 差異 Service API (或 Backend) 在 Kong 中我們使用 Service 來定義上游 URL;Azure 中則在 API 層定義,或使用 Backend 實體來管理共用的上游設定。 Route Operation Kong 的 Route 負責路徑匹配;Azure 則在 API 層的 Operation 定義具體 HTTP method 與路徑。 Plugin Policy Kong 使用內建 Plugin,直接套用,或使用 lua 寫自訂 plugin;Azure 則使用 XML 定義 Policy。 Consumer Subscription Kong 透過 Consumer 身分來控制 API 存取權;Azure 透過 Subscription (訂閱帳戶) 來控制。每一個「訂用帳戶」都會產生一組 Subscription Key (Primary & Secondary Key),呼叫 API 時,於 Header 設置 Ocp-Apim-Subscription-Key 來呼叫。 Product 在 Azure APIM 中,API 必須被包在一個 Product 中才能被「訂閱」與呼叫(除非該 API 是 open 的,所有人皆可呼叫)。 ...

December 17, 2025 · 1 分鐘

Kong OIDC Plugin:Token 驗證筆記

前言 當你的 API 以 OpenID Connect 協定實作 authentication(認證)時,就會使用到 Kong OIDC(OpenID Connect) plugin。本篇要關注的是,當利用 OpenID Connect 協定,讓 Kong 在認證階段自動與 IdP(例如 ADFS)整合,獲取並驗證 JWT Token,保證只有合法使用者能夠存取上游服務的這個過程。 驗證流程 當 Kong 收到來自 consumer 的請求後,會進行以下流程: Issuer Discovery Kong 透過 OIDC plugin 中的 issuer 參數,從 .well-known/openid-configuration URL,自動抓取 IdP 的 Metadata。Metadata 包含 jwks_uri(JSON Web Key Set)endpoint,用於後續公鑰獲取。 若在 plugin 的 extra_jwks_uris 有設定放置公鑰的 URL,Kong 會先依序對每個 extra_jwks_uris URL 嘗試下載 JWKS。若所有 extra_jwks_uris 都無法成功(連線失敗或無對應公鑰),再從 .well-known/openid-configuration 中的 jwks_uri 嘗試;若未設定 extra_jwks_uris,則會直接使用 .well-known Metadata 提供的 jwks_uri。 Token 取得: Kong 會對 ADFS 發起請求並獲取並 JWT Token。 ...

August 11, 2025 · 1 分鐘