教程文档人工智能【免费下载链接】mcp-for-beginnersThis open-source curriculum introduces the fundamentals of Model Context Protocol (MCP) through real-world, cross-language examples in .NET, Java, TypeScript, JavaScript, Rust and Python. Designed for developers, it focuses on practical techniques for building modular, scalable, and secure AI workflows from session setup to service orchestration.项目地址https://gitcode.com/GitHub_Trending/mc/mcp-for-beginners点击查看免费下载本篇技术指南以 mcp-for-beginners 课程中11-simple-auth章节的 TypeScript 解决方案为主体完整讲解一个基于 Express JWT 的 MCP Server 认证示例的安装、构建、运行与验证全过程。你将学会如何用npm脚本一键生成令牌、启动服务端与客户端并通过修改 scope 的实验亲眼验证 403 拒绝行为从而理解 MCP 服务中认证Authentication与授权Authorization的落地方式。示例概览从无认证到 JWT 的基本一步在 11-simple-auth 章节 中作者把 MCP 服务的安全演进拆成了三个阶段完全无认证 → 基础认证Basic Auth直接发送Authorization头→ JWT 令牌认证。本节 TypeScript 解决方案正是第三阶段的成果它把整套方案落成了一份可运行、可实验的最小工程位置在解决方案说明英文原版源码目录03-GettingStarted/11-simple-auth/solution/typescript/src/包含server.ts服务端、client.ts客户端、util.tsJWT 生成与校验、test.ts令牌自检整个示例的核心链路是客户端读取.env中的 JWT放入 HTTPAuthorization请求头请求先经过 Express 中间件中间件依次校验「头是否存在 → 令牌签名是否有效 → 用户是否存在于系统 → 是否具备所需 scope」校验通过后请求才被转发到基于modelcontextprotocol/sdk的 MCP Server处理process-files等工具调用。第一步安装依赖与构建示例使用 TypeScript 编写、以 ES Module 方式运行源码位于src/编译产物输出到build/。安装依赖只需在解决方案目录执行npm install项目核心依赖见 package.jsonmodelcontextprotocol/sdkMCP 官方 SDK提供McpServer、StreamableHTTPServerTransport与客户端组件express承载 HTTP 路由与中间件的 Web 框架jsonwebtokenJWT 的签名与校验dotenv从.env文件读取令牌到环境变量zod定义 MCP 工具的输入 Schema。安装完成后编译 TypeScriptnpm run buildbuild脚本对应tsc会把src/下的.ts文件编译为build/下的 JavaScript。后续所有运行命令start、client、generate都基于编译后的build/目录执行因此修改源码后必须重新npm run build才生效这一点在后面的 scope 实验里尤为重要。第二步生成 JWT 令牌运行npm run generate该命令对应node ./build/util.js会调用 util.ts 中的createToken()生成一个 JWT 并写入项目根目录的.env文件格式为token生成的JWT客户端运行时将从该文件读取令牌。从源码看这个令牌的构成非常清晰const payload { sub: 1234567890, name: User usersson, admin: true, iat: Math.floor(Date.now() / 1000), // 签发时间 exp: Math.floor(Date.now() / 1000) 60 * 60, // 1 小时后过期 scopes: [Admin.Write, User.Read] // 令牌携带的权限范围 }; const token jwt.sign(payload, secretKey, { algorithm: HS256, header: { alg: HS256, typ: JWT } }); fs.writeFileSync(path.join(process.cwd(), .env), token${token}\n);几个值得注意的细节签名算法是 HS256签名密钥硬编码为your-secret-key源码注释明确提示生产环境必须改用环境变量等安全方式管理密钥令牌是有时间限制的1 小时过期这是相比 Basic Auth 的一次重要安全升级scopes数组声明了令牌拥有的权限Admin.Write和User.Read。后续 scope 实验正是围绕这个数组展开的。第三步启动服务端与客户端先启动服务端npm start对应node ./build/server.js服务端会在8000 端口监听路由为/mcp。然后在另一个终端运行客户端npm run client对应node ./build/client.js。客户端启动时会加载.env中的令牌将其放入Authorization请求头连接http://localhost:8000/mcp并调用listTools列出可用工具详见 client.ts。预期输出认证成功时服务端终端会依次打印以下日志对应中间件的每一步校验User exists User has required scopes Middleware executed客户端终端则会看到连接成功、会话 ID 与可用工具列表Connected to MCP server with session ID: c1e50d7b-acff-4f11-8f96-5ae490ca1eaa Available tools: { tools: [ { name: process-files, inputSchema: [Object] } ] } Client disconnected. Exiting...会话 ID如c1e50d7b-acff-4f11-8f96-5ae490ca1eaa是服务端通过randomUUID()生成的用于在transports映射中按会话维护流式 HTTP 传输实例。可用工具process-files是示例注册的一个 MCP 工具它会遍历一批待处理的 CSV 文件sales1.csv、sales2.csv、sales3.csv对未处理的文件逐条发送notifications/message通知并返回处理数量见 server.ts。第四步Scope 实验 —— 亲眼看授权如何失败运行示例只是热身这份文档的精髓在于一个「动手改代码」的实验用来确认 scope 校验真实生效。在 server.ts 中找到中间件里的这段校验if(!hasScopes(token, [User.Read])){ res.status(403).send(Forbidden - insufficient scopes); }它要求传入的令牌必须包含User.Read这个 scope。现在把它改成User.Write然后重新构建并重启服务端npm run build npm start由于生成的令牌只包含Admin.Write和User.Read不包含User.Write你会看到认证失败客户端终端报错Error initializing client: Error: Error POSTing to endpoint (HTTP 403): Forbidden - insufficient scopes服务端终端只打印到User exists也就是说请求在「用户存在」校验之后、scope 校验环节被 403 拦下中间件没有继续向后放行——这正好印证了hasScopes的实现逻辑function hasScopes(scope: string, requiredScopes: string[]) { let decodedToken verifyToken(scope); return requiredScopes.every(scope decodedToken?.scopes.includes(scope)); }它要求令牌的scopes数组必须同时包含所有必需 scopeevery语义。如何恢复文档给了两种等价恢复方式任选其一把令牌里加上User.Writescope即修改 util.ts 的scopes数组后重新npm run generate再重跑客户端直接把 server.ts 的校验改回[User.Read]。深入源码认证中间件的四层防线理解了运行与实验之后再把 server.ts 中的认证逻辑串起来可以看到中间件其实做了四层递进检查app.use((req, res, next) { // 第 1 层Authorization 头是否存在缺失返回 401 if(!req.headers[authorization]) { res.status(401).send(Unauthorized); return; } // 第 2 层JWT 签名是否有效无效返回 403 let token req.headers[authorization]; if(!isValid(token)) { res.status(403).send(Forbidden); return; } // 第 3 层令牌对应用户是否存在于系统不存在返回 403 if(!isExistingUser(token)) { res.status(403).send(Forbidden); console.log(User does not exist); return; } console.log(User exists); // 第 4 层令牌是否具备所需 scope不满足返回 403 if(!hasScopes(token, [User.Read])){ res.status(403).send(Forbidden - insufficient scopes); return; } console.log(User has required scopes); console.log(Middleware executed); next(); });注意 HTTP 状态码的语义区分401Unauthorized用于认证失败如缺少凭证头403Forbidden用于授权失败如令牌无效、用户不存在、scope 不足。这与 11-simple-auth 章节 中对认证你是谁与授权你能做什么的定义一一对应。isExistingUser的实现是简化版——它只是在一个硬编码数组里查找用户名const users [user1, User usersson]; function isExistingUser(token) { let decodedToken verifyToken(token); // TODO, check if user exists in DB return users.includes(decodedToken?.name || ); }源码中的TODO注释也明确提示真实系统里应把用户列表替换为数据库查询甚至交由身份提供方IdP来校验。除此之外test.ts 提供了一个离线自检工具它读取.env中的令牌并调用verifyToken解码同时检查User usersson是否存在于用户列表中适合在排查「令牌为什么被拒」时快速定位问题。从中间件到会话MCP 流式 HTTP 的服务端骨架认证只是入口MCP 请求本身通过StreamableHTTPServerTransport处理。服务端在app.post(/mcp)路由中按会话管理传输实例若请求头带mcp-session-id且存在于transports映射则复用已有传输若无会话 ID 且请求体是initialize请求则新建传输注册sessionIdGenerator: () randomUUID()生成会话 ID并在onsessioninitialized时把传输存入映射其余情况返回400 Bad Request: No valid session ID provided。同时app.get(/mcp)用于服务端经 SSE 向客户端推送通知app.delete(/mcp)用于终止会话。需要说明的是从章节文档中的警告看这套基于mcp-session-id的会话跟踪示例针对的是 MCP2025-11-25规范MCP2026-07-28规范移除了initialize握手与协议级会话 ID新实现应使用自包含请求详情可参考 01-CoreConcepts/mcp-2026-07-28.md。安全边界与下一步演进这份示例刻意保持了「简单到可以读懂」的粒度文档和源码都对安全边界做了明确提示密钥不能硬编码util.ts中的your-secret-key仅供演示生产环境应放入环境变量或密钥管理服务令牌应可撤销HS256 对称签名配合固定密钥一旦泄露难以吊销需要引入令牌黑名单、过期刷新或改用 RS256 IdP 等机制不应把明文凭证写在代码里客户端client.ts虽然演示时回退到secret123但实际应始终从环境变量读取令牌process.env.token。从课程的整体路线看本示例是通往更完善安全模型的起点若想进一步了解基于 Entra 等身份提供方的企业级认证方案可继续阅读 05-AdvancedTopics/mcp-security-entra/README.md章节中还附有基础认证Basic Auth的完整实现见 code/basic 目录可与本示例对比直观体会 JWT 带来的改进。学完认证后下一步是了解如何把 MCP 服务接入各类宿主环境见 12-mcp-hosts 章节。小结通过这份 TypeScript 解决方案你可以完整经历「安装 → 构建 → 生成令牌 → 启动服务端 → 运行客户端 → 修改 scope 验证授权失败」的全过程并在源码层面理解 MCP 认证的中间件四层检查、JWT 的构造与校验、以及流式 HTTP 传输的会话管理。从无认证到 Basic Auth 再到 JWT再到基于 IdP 的标准身份模型这正是 mcp-for-beginners 课程为开发者铺好的安全演进路径。赞分享教程文档人工智能【免费下载链接】mcp-for-beginnersThis open-source curriculum introduces the fundamentals of Model Context Protocol (MCP) through real-world, cross-language examples in .NET, Java, TypeScript, JavaScript, Rust and Python. Designed for developers, it focuses on practical techniques for building modular, scalable, and secure AI workflows from session setup to service orchestration.项目地址https://gitcode.com/GitHub_Trending/mc/mcp-for-beginners点击查看免费下载相关推荐mcp-for-beginners 实战用 PyJWT 构建与验证 JWT为 MCP Server 打造认证基础mcp for beginners 实战用 PyJWT 构建与验证 JWT为 MCP Server 打造认证基础 本篇技术指南以 mcp for begin教程文档人工智能mcp-for-beginners 实战在 TypeScript 中运行 JWT 认证实验jwt-labmcp for beginners 实战在 TypeScript 中运行 JWT 认证实验jwt lab 本指南以 03 GettingStarted/1教程文档人工智能MCP 简单认证实践从 Basic Auth 到 JWT 的 TypeScript 实战mcp-for-beginnersMCP 简单认证实践从 Basic Auth 到 JWT 的 TypeScript 实战mcp for beginners 导读 本指南围绕开源课程 mc教程文档人工智能上一篇在 ik_llama.cpp 中运行 1.58-bit BitNet 与兼容 GGUF 模型I2_S 重量化、IQ2_BN 与 llama-server 实战指南下一篇千古前端图文教程Vue 2 系统指令全解——插值表达式、v-bind、v-on 与跑马灯实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考