什麼是 JWKS?JSON Web Key Set 完整指南(給台灣開發者的實用教學)

更新 發佈閱讀 9 分鐘

如果你有使用 JWT、OAuth,或其他基於 Token 的驗證機制,應該對 JWKS 不陌生。那麼,JWKS 到底是什麼?為什麼重要?

簡單來說,JWKS(JSON Web Key Set) 是一個標準化的 JSON 文件,用來公開一組以上的公開金鑰(JWKs),讓客戶端與 API 可以用來驗證簽章或進行加密。

這份指南會用淺顯的方式解釋 JWKS,展示 JWK 的格式與範例,說明 jwks_uri 的用途,並提供在生產環境建立與管理 JWKS 的實務建議。

認識 JWK 與 JWKS

  • JWK(JSON Web Key)
     JWK 是一個 JSON 物件,用來表示一把密鑰,例如 RSA 公鑰或 EC 金鑰。常見欄位包括:  - kty(金鑰類型)
     - kid(金鑰 ID)
     - use(用途,例如 sig 簽章驗證、enc 加密)
     - alg(演算法)
     - 金鑰內容(例如 RSA 的 n / e,或 EC 的 x / y
  • JWKS(JSON Web Key Set)
     JWKS 則是包含多個 JWK 的 JSON 文件。例如:
{
"keys": [
{
"kty": "RSA",
"kid": "2023-01-key-1",
"use": "sig",
"alg": "RS256",
"n": "...",
"e": "AQAB"
}
]
}

因為 Token 的發行服務會公開 JWKS,其他服務(API、客戶端)就能自動抓取這些公開金鑰來驗證簽章或進行加密。JWKS 的標準化設計,讓各種程式庫都能互通。

JWKS 在驗證與 API 架構中的角色

在 API 生態系中,典型流程如下:

  1. 發行方(Issuer):在固定網址(jwks_uri)公開 JWKS。
  2. 客戶端或資源伺服器:抓取 JWKS 並快取。
  3. 驗證 Token:當收到 JWT 時,Token header 的 kid 會指出要用哪一把 key。
  4. 比對金鑰:客戶端從 JWKS 找到對應 JWK,並用它驗證簽章或進行加密相關處理。
  5. 金鑰輪替(Key Rotation):只要更新 JWKS,客戶端就能自動使用新的公開金鑰,不需要重新部署程式。

如果是 JWE(加密 Token),JWKS 也可以提供加密用的公開金鑰。

jwks_uri:如何找到與使用

許多身分驗證服務(例如 OpenID Connect)會在 Discovery 文件中提供 jwks_uri,通常位於 /.well-known/openid-configuration,例如:

{
"issuer": "https://idp.example.com",
"jwks_uri": "https://idp.example.com/.well-known/jwks.json"
}

使用方式:

  • 在 OIDC/OAuth 客戶端函式庫中設定 jwks_uri,或讀取 Discovery 文件自動取得。
  • 函式庫會抓取並快取 JWKS,並透過 kid 找到正確的 JWK。
  • 建立快取更新策略(例如定期刷新,或驗證失敗時重新抓取)。
  • 建議:一定要透過 HTTPS 提供 JWKS,並使用穩定的 kid 方便輪替。

JWK 格式範例與欄位解說

以下是一個 RSA 公鑰 JWK:

{
"kty": "RSA",
"kid": "2011-04-29",
"use": "sig",
"alg": "RS256",
"n": "oahUI...base64url-modulus...",
"e": "AQAB"
}

欄位說明:

  • kty — 金鑰類型(RSA、EC、oct)
  • kid — 金鑰 ID,用來在 JWKS 中選擇正確的金鑰
  • use — 用途:sig 簽章驗證、enc 加密
  • alg — 演算法,例如 RS256ES256
  • n, e(RSA)或 x, y, crv(EC)— 公鑰內容,使用 base64url 編碼

完整 JWKS 範例(含 RSA 與 EC 金鑰):

{
"keys":[
{"kty":"RSA","kid":"rsa1","use":"sig","alg":"RS256","n":"...","e":"AQAB"},
{"kty":"EC","kid":"ec1","use":"enc","alg":"ECDH-ES","crv":"P-256","x":"...","y":"..."}
]
}

PEM 與 JWK 的轉換

PEM(Privacy-Enhanced Mail)是常見的金鑰與憑證格式,以 Base64 編碼的 DER,加上標頭與標尾,例如:

-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----

你可能會遇到需要將 PEM 格式的公鑰轉換成 JWK:

  • 產生 RSA 公鑰 PEM:
openssl rsa -in private.pem -pubout -out public.pem
  • 產生 EC 公鑰 PEM:
openssl ec -in key.pem -pubout -out public.pem

再用 JOSE 類庫(如 node-jose、python-jose)或工具把 PEM 公鑰轉換成 JWK。

如果需要快速操作,可以使用 Authgear JWK Generator,將 PEM 公鑰轉換為正確格式的 JWK,方便直接加入 JWKS。

⚠️ 安全提醒

  • 絕對不要在 JWKS 中公開私鑰
  • JWKS 必須透過 HTTPS 提供
  • 制定安全的金鑰輪替策略

建立與管理 JWKS 的最佳實踐

建立 / 發佈

  • 使用函式庫或工具(node-jose、python-jose、OpenSSL + 轉換器)產生 JWK
  • JWKS 中僅包含公開金鑰
  • 放置於穩定的 HTTPS endpoint(例如 /.well-known/jwks.json
  • 每把金鑰設定 kid,方便未來輪替

金鑰輪替(Key Rotation)流程

  1. 產生新金鑰對,將公開金鑰加入 JWKS,設定新 kid
  2. 伺服器改用新的私鑰簽章 Token
  3. 保留舊金鑰於 JWKS,直到舊 Token 全部過期
  4. 移除舊金鑰

安全最佳實踐

  • 僅透過 HTTPS 提供 JWKS
  • JWKS 可快取,但在驗證失敗時必須能刷新
  • JWKS 應只包含目前使用中的金鑰
  • 監控驗證失敗日誌,偵測金鑰缺失或 kid 不匹配

常見問題(FAQ)

Q: JWKS 有什麼用途?

A: 用來公開一組公開金鑰,讓客戶端或 API 抓取,用於 JWT 簽章驗證或加密。

Q: JWKS 檔案是公開的嗎?

A: 是的,JWKS 通常僅包含公開金鑰,私鑰必須妥善保護,不能公開。

Q: 要怎麼產生 JWK?

A: 可以透過 OpenSSL 轉換、JOSE 類庫,或直接使用 Authgear JWK Generator

Q: JWKS 與 JWT / JWE 的關係?

  • JWT(簽章 Token):JWT header 中的 kid 會對應到 JWKS 裡的 JWK,用來驗證簽章。
  • JWE(加密 Token):JWKS 可以公開加密用的公鑰,用於加密與解密流程。

結語

JWKS(JSON Web Key Set)雖然小巧,但在 Token 安全架構中至關重要。它標準化了「如何公開與取得公開金鑰」,讓服務之間能自動化、安全地進行簽章驗證與加密。

要點包括:

  • 使用正確的 JWK 格式
  • 透過 HTTPS 安全公開 JWKS
  • 建立金鑰輪替策略
  • 善用工具(如 Authgear JWK Generator)加快開發與測試

原文英文版刊於:What is JWKS? JSON Web Key Set Explained with Examples - Authgear Blog

留言
avatar-img
產品開發日誌
3會員
5內容數
有關AI和網絡安全的產品人日誌
你可能也想看
Thumbnail
本文介紹瞭如何在後端系統開發時設計不同表單的簽核流程,包括請假表單和採購表單。以及如何動態生成簽核表單,並建立簽核節點。另外還介紹瞭如何利用繼承來簡化簽核流程的設定。
Thumbnail
本文介紹瞭如何在後端系統開發時設計不同表單的簽核流程,包括請假表單和採購表單。以及如何動態生成簽核表單,並建立簽核節點。另外還介紹瞭如何利用繼承來簡化簽核流程的設定。
Thumbnail
此章節旨在引導讀者如何建立Java開發環境,包括安裝JDK、使用命令行工具編寫和運行Java程式,以及如何在Visual Studio Code、IntelliJ IDEA和Eclipse等IDE中設置和使用Java環境。
Thumbnail
此章節旨在引導讀者如何建立Java開發環境,包括安裝JDK、使用命令行工具編寫和運行Java程式,以及如何在Visual Studio Code、IntelliJ IDEA和Eclipse等IDE中設置和使用Java環境。
Thumbnail
OKR (Object Key Result)是一套目標管理工具,Google、IBM、Intel 等科技大廠導入使用而竄紅,但為什麼我用起來卡卡?
Thumbnail
OKR (Object Key Result)是一套目標管理工具,Google、IBM、Intel 等科技大廠導入使用而竄紅,但為什麼我用起來卡卡?
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
本章節的目的是介紹Java中的套件使用,包括如何引用第三方套件和自定義模組,如何創建和使用自定義套件,以及介紹一些常見的Java標準庫套件。這些內容將幫助讀者更好地理解和使用Java的套件系統。
Thumbnail
本章節的目的是介紹Java中的套件使用,包括如何引用第三方套件和自定義模組,如何創建和使用自定義套件,以及介紹一些常見的Java標準庫套件。這些內容將幫助讀者更好地理解和使用Java的套件系統。
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
親愛的 Java 開發者和愛好者們,您是否對於 Java 的魅力充滿好奇?是否有著一個關於 Java 的獨特見解或創新想法?現在是您展現才華的時刻了! 我們誠摯地邀請您參與我們的 Java 投稿活動,分享您的專業知識、經驗和見解。無論您是一位有著多年 Java 開發經驗的專家,還是一位剛剛踏入
Thumbnail
親愛的 Java 開發者和愛好者們,您是否對於 Java 的魅力充滿好奇?是否有著一個關於 Java 的獨特見解或創新想法?現在是您展現才華的時刻了! 我們誠摯地邀請您參與我們的 Java 投稿活動,分享您的專業知識、經驗和見解。無論您是一位有著多年 Java 開發經驗的專家,還是一位剛剛踏入
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
授權碼模式連線流程 用戶端請求自己的伺服器。 伺服器發現用戶沒登入,就導向認證伺服器。 認證伺服器顯示授權頁面,等待用戶授權。 用戶確認授權後,授權頁面會向認證伺服器請求授權碼。 用戶獲取授權碼。 用戶將授權碼傳給伺服器。 伺服器拿授權碼向認證伺服器取得token。 應用註冊
Thumbnail
授權碼模式連線流程 用戶端請求自己的伺服器。 伺服器發現用戶沒登入,就導向認證伺服器。 認證伺服器顯示授權頁面,等待用戶授權。 用戶確認授權後,授權頁面會向認證伺服器請求授權碼。 用戶獲取授權碼。 用戶將授權碼傳給伺服器。 伺服器拿授權碼向認證伺服器取得token。 應用註冊
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News