讓 AI Agent、MCP Server 與 CLI 安全登入
代表你登入、保管 Token,每次呼叫 MCP 都帶上它。
登入帳號,確認這個 App 要拿哪些權限,按下允許。
驗證身分、徵得同意、簽發 Token,公開驗簽用的 JWKS。
持有工具與資料。驗 Token,決定放不放行。
Lab 01 的 Server 不檢查任何東西,所以呼叫一定成功。
工具:whoami、list_notes、create_note。筆記存在記憶體裡。
Protected Resource Metadata(PRM):我是哪個資源、信任哪個 Authorization Server。這是 MCP Server 自己的端點,不是另一台伺服器。
AS metadata:去哪登入、去哪換 Token、去哪拿公鑰,以及支援哪種 PKCE。
Client 產生的隨機字串,一直留在 Client 手上。
放進授權網址,讓 Signet 先記下來。method=S256
瀏覽器帶回的是授權碼 code,還不是 Token。
Signet 確認 SHA-256(verifier) 等於當初的 challenge。攔截到 code 的人沒有 verifier,換不到 Token。
state 確認 callback 屬於這次登入;iss(RFC 9207)確認回應來自預期的 Authorization Server。access;refresh token 或 ID token 不能呼叫 MCPwhoami 回傳的就是它notes:read,卻呼叫 create_notenotes:read 控制入口,notes:write 控制寫入工具。notes:readcreate_note 仍要求 notes:writeX-MCP-Subject: admin header 騙不過它。本教材的 Server 與 Kong plugin 都離線驗 JWT,不會每次向 Signet 查撤銷狀態。
github.com/go-training/
mcp-oauth2-workshop
modelcontextprotocol.io
Authorization 2026-07-28
github.com/go-signet/
kong-mcp-oauth2