
「公鑰……到底放在哪裡了?」
在使用 RSA 等公鑰方式進行 JWT 簽章驗證時,總會遇到這個難題: 「公鑰該如何派送才最安全?」、「更新金鑰時,難道要改動所有伺服器的設定嗎?」
解決這些煩惱的聰明方案,就是 JWKS (JSON Web Key Set) 這套機制。
JWKS:公鑰的「展示櫃」
JWKS(JSON Web 金鑰集)顧名思義就是「以 JSON 格式撰寫的金鑰集合」。
驗證伺服器(如 Auth0 或 Cognito)會在特定的 URL 公開這份 JSON,而需要驗證 Token 的 API 伺服器則會去該位址讀取它。
這就像是:「最新的公鑰都展示在這個展示櫃裡,請視需求自由取用」。
JWKS 的迷人之處
- 自動輪換 (Rotation):即使更新了金鑰,也只需更換展示櫃裡的內容。API 伺服器只需查看該 URL,就能自動取得最新的金鑰。
- 管理多把金鑰:可以同時擺放「舊金鑰」與「新金鑰」,讓金鑰切換期也能順暢過渡,不影響服務。
- 世界標準:由於被 OAuth 2.0 或 OIDC 廣泛採用,絕大多數的驗證函式庫都提供原生支援。
窺探 JWKS 內部:其實只是 JSON
雖然名稱聽起來很專業,但結構其實非常簡單。就是在 keys 陣列中放入個別金鑰的資訊:
{
"keys": [
{
"kty": "RSA", // 金鑰種類 (如 RSA)
"use": "sig", // 用途 (用於簽章!)
"kid": "my-key-2024", // 金鑰識別碼 (像是金鑰的名字)
"n": "...", // 公鑰資料 1
"e": "AQAB" // 公鑰資料 2
}
]
}
在 DevToolKits 體驗「建立」 JWKS
使用本站的 JWKS 生成工具,您可以直接在瀏覽器中生成開發或測試所需的金鑰對。
您可以同時獲得「公鑰 (JWKS 格式)」與「私鑰 (PEM 格式)」,非常適合用於本地端驗證功能的實作測試。當然,這一切都在瀏覽器內部完成,不必擔心您的私鑰外流到網路上。
結語
JWKS 是一項偉大的發明,它讓複雜的金鑰管理變得簡單且安全。
正確理解並活用這套機制,能讓您的驗證系統變得更加優雅。如果您在為「金鑰派送」感到困擾,請務必想起這座展示櫃。