開始使用
MCP Auth 也支援 Python!請參考 Python SDK 儲存庫 以取得安裝與使用方式。
選擇相容的 OAuth 2.1 或 OpenID Connect 提供者
MCP 規範對授權 (Authorization) 有特定要求。其授權機制基於既有規範,實作其中精選子集功能,以確保安全性與互通性,同時維持簡潔:
- OAuth 2.1 IETF DRAFT (draft-ietf-oauth-v2-1-13)
- OAuth 2.0 授權伺服器中繼資料 (Authorization Server Metadata)(RFC 8414)
- OAuth 2.0 動態用戶端註冊協定(RFC 7591)
- OAuth 2.0 受保護資源中繼資料(RFC 9728)
這些規範共同提供 MCP 實作安全且標準化的授權 (Authorization) 框架。
你可以查閱 MCP 相容提供者清單 以確認你的提供者是否支援。
安裝 MCP Auth SDK
- pnpm
- npm
- yarn
pnpm add mcp-authnpm install mcp-authyarn add mcp-auth初始化 MCP Auth
第一步是定義你的資源標示符,並設定將被信任用於驗證 (Authentication) 的授權伺服器。MCP Auth 現在以資源伺服器模式運作,符合新版 MCP 規範,要求支援 OAuth 2.0 受保護資源中繼資料(RFC 9728)。
若你的提供者符合:
你可以使用內建函式擷取中繼資料並初始化 MCP Auth 實例:
import { MCPAuth, fetchServerConfig } from 'mcp-auth';
// 1. 定義你的資源標示符,並擷取其信任授權伺服器的設定。
const resourceIdentifier = 'https://api.example.com/notes';
const authServerConfig = await fetchServerConfig('https://auth.logto.io/oidc', { type: 'oidc' });
// 2. 以資源伺服器模式初始化 MCPAuth。
// `protectedResources` 可為單一物件或多個資源的陣列。
const mcpAuth = new MCPAuth({
protectedResources: {
metadata: {
resource: resourceIdentifier,
authorizationServers: [authServerConfig],
scopesSupported: ['read:notes', 'write:notes'],
},
},
});
如果你使用如 Cloudflare Workers 等 edge 執行環境,無法在頂層進行 async fetch,請改用隨需發現:
const authServerConfig = { issuer: 'https://auth.logto.io/oidc', type: 'oidc' };
如需其他授權伺服器中繼資料設定方式(包含自訂中繼資料 URL、資料轉換或手動指定),請參閱 其他 MCP Auth 設定方式。
掛載受保護資源中繼資料端點
為符合新版 MCP 規範,MCP Auth 會將 OAuth 2.0 受保護資源中繼資料端點(RFC 9728)掛載到你的 MCP 伺服器。此端點讓用戶端可發現:
- 哪些授權伺服器可為你的受保護資源簽發有效權杖
- 每個資源支援哪些權限範圍 (Scopes)
- 權杖正確驗證所需的其他中繼資料
端點路徑會依據你的資源標示符的路徑自動決定:
- 無路徑:
https://api.example.com→/.well-known/oauth-protected-resource - 有路徑:
https://api.example.com/notes→/.well-known/oauth-protected-resource/notes
MCP 伺服器現在作為資源伺服器,負責驗證權杖並提供其受保護資源的中繼資料,並完全依賴外部授權伺服器進行驗證 (Authentication) 與授權 (Authorization)。
你可以使用 SDK 提供的方法掛載此端點:
import express from 'express';
const app = express();
// 掛載路由以提供受保護資源中繼資料。
// 資源 "https://api.example.com" → 端點:/.well-known/oauth-protected-resource
// 資源 "https://api.example.com/notes" → 端點:/.well-known/oauth-protected-resource/notes
app.use(mcpAuth.protectedResourceMetadataRouter());
使用 Bearer 驗證 (Auth) 中介軟體
初始化 MCP Auth 實例後,你可以套用 Bearer 驗證 (Auth) 中介軟體來保護 MCP 路由。此中介軟體現在需指定端點所屬資源,以便正確驗證權杖:
OAuth 2.0 規範要求 audience 參數以確保權杖驗證安全。不過,目前為了相容尚未支援資源標示符的授權伺服器,audience 為選填。出於安全考量,請盡可能務必填寫 audience 參數。未來版本將強制要求受眾 (Audience) 驗證,以完全符合規範。
在 OAuth 2.0 中,權限範圍 (Scopes) 是主要的權限控制機制。即使權杖 (token) 具有正確的 audience,也不代表使用者就有執行某操作的權限——授權伺服器可能會簽發權限範圍為空或受限的權杖。
請務必使用 requiredScopes 來強制檢查權杖是否包含每個操作所需的權限。切勿假設有效的權杖就代表擁有完整存取權。
import express from 'express';
const app = express();
// 掛載路由以提供受保護資源中繼資料。
app.use(mcpAuth.protectedResourceMetadataRouter());
// 以資源專屬政策保護 API 端點。
app.get(
'/notes',
mcpAuth.bearerAuth('jwt', {
resource: resourceIdentifier,
audience: resourceIdentifier, // 啟用受眾 (Audience) 驗證以提升安全性
requiredScopes: ['read:notes'],
}),
(req, res) => {
// 權杖驗證通過時,`req.auth` 會帶有其宣告 (Claims)。
console.log('Auth info:', req.auth);
res.json({ notes: [] });
},
);
app.listen(3000);
如上例所示,我們指定 jwt 權杖類型與資源標示符。中介軟體會自動根據該資源所設定的信任授權伺服器驗證 JWT 權杖,並填入已驗證使用者資訊。
還沒聽過 JWT(JSON Web Token)嗎?別擔心,繼續閱讀文件即可,我們會在需要時說明。你也可以參考 Auth Wiki 取得快速介紹。
更多 Bearer 驗證 (Auth) 設定資訊,請參閱 設定 Bearer 驗證 (Auth)。
在 MCP 實作中取得驗證 (Auth) 資訊
套用 Bearer 驗證 (Auth) 中介軟體後,你可以在 MCP 實作中存取已驗證使用者(或身分)的資訊:
工具處理函式的第二個參數會包含 authInfo 物件,內含已驗證使用者資訊:
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { z } from 'zod';
const server = new McpServer(/* ... */);
// 如前述範例初始化 MCP Auth
// ...
server.registerTool(
'add',
{
description: '加總兩個數字',
inputSchema: { a: z.number(), b: z.number() },
},
async ({ a, b }, { authInfo }) => {
// 現在你可以使用 `authInfo` 物件存取驗證資訊
}
);
下一步
繼續閱讀,瞭解如何將 MCP Auth 與 MCP 伺服器整合的端到端範例,以及如何在 MCP 用戶端處理驗證 (Auth) 流程。