如何用 skills 实现 OAuth 2.1 完整流程PKCE、刷新令牌轮换与 JWT 校验【免费下载链接】skillsMy own collection of skills for modern Node.js development项目地址: https://gitcode.com/gh_mirrors/skills15/skills来自 GitHub 加速计划的skills是一套面向现代 Node.js 开发的实战技能库其中的oauth 技能是 OAuth 2.1 授权流程的完整落地指南。本文带你一步步走完 OAuth 2.1 的三大核心环节PKCE、刷新令牌轮换与JWT 校验——不需要背诵任何 RFC照着 skills/oauth/SKILL.md 的分步指引即可完成生产级配置。 认识 skillsNode.js 开发的 AI 技能库skills不是一个普通的应用程序而是一个技能/提示词库每个技能目录都是一份结构化的最佳实践文档入口为SKILL.md细则放在rules/子目录供 AI 编码助手或直接给开发者查阅使用。完整技能清单见 README.md技能用途oauthOAuth 2.0/2.1 规范专家含 Fastify 集成模式本文主角fastifyFastify 开发全套最佳实践路由、错误处理、认证等nodeNode.js 开发最佳实践缓存、日志、优雅退出等typescript-magicianTypeScript 高级类型系统技巧documentation基于 Diátaxis 框架的技术写作技能 oauth 技能一站式覆盖的授权专家打开 skills/oauth/SKILL.md你会看到它的能力边界在 skills/oauth/tile.json 中描述得很清楚授权码 PKCE流程本文重点客户端凭据Client Credentials模式设备授权流程Device Flow刷新令牌轮换Refresh Token RotationJWT 校验与令牌内省/撤销Introspection/Revocation适用场景也很直白搭建登录流程、保护 API 路由、排查令牌校验报错、重定向 URI 不匹配、CSRF 问题以及任何涉及 RFC 6749 / 6750 / 7636 / 8252 / 8628 的合规疑问。 快速上手三步拿到这份指南1️⃣ 克隆仓库git clone https://gitcode.com/gh_mirrors/skills15/skills2️⃣ 打开 oauth 技能入口核心内容都在 skills/oauth/SKILL.md 一个文件里从何时使用到分步实现、安全检查表、反模式清单一篇读完即可上手。3️⃣ 按需安装依赖技能中给出的安装命令是见 skills/oauth/SKILL.md#L22-L24npm install fastify/oauth2 fastify/cookie fastify/session fastify-plugin 先搞懂 OAuth 2.1给新手的流程速览OAuth 2.1 并不是一个全新协议而是把 OAuth 2.0 中最安全的实践固化为标准授权码流程 PKCE成为所有客户端尤其是 SPA 和移动端的唯一推荐方式隐式流程被正式废弃。整个授权码流程可以简化为 4 步跳转用户点击使用第三方账号登录浏览器跳转到授权服务器授权用户在授权服务器登录服务器返回一个一次性的授权码code换令牌客户端拿授权码去令牌端点换回access_token访问令牌refresh_token刷新令牌访问客户端调用 API 时携带 access_token令牌过期则用 refresh_token 换新两个关键安全机制正是本文要配置的主角PKCERFC 7636专为公共客户端设计的防劫持机制——客户端先随机生成一段code_verifier用 SHA-256 哈希成code_challenge随授权请求发出换令牌时再出示原始值。即使授权码被人截获没有原始值也换不到令牌。state 参数一个随机值用于防止CSRF跨站请求伪造攻击回调时必须原样比对。️ 第一步开启 PKCES256并注册 OAuth 插件技能的第 2 步skills/oauth/SKILL.md#L28-L58给出了 Fastify 插件的完整配置。对新手来说只需理解下面这张配置要点表配置项作用新手提示scope申请用户授权的范围如[openid, profile, email]按需最小化credentials.client客户端 ID 与密钥一律放环境变量绝不硬编码auth.authorizeHost / tokenHost授权服务器地址授权端点与令牌端点分别配置startRedirectPath登录入口路径用户从这里发起登录跳转callbackUri回调地址⚠️ 必须与授权服务器注册的 redirect URI逐字符一致RFC 6749 §3.1.2pkce: S256启用 SHA-256 PKCE公共客户端必选RFC 7636 §4.2generateStateFunction/checkStateFunction生成并校验 statestate 存入会话回调时比对防 CSRF技能在配置完成后还留了一个验证检查点先确认callbackUri与授权服务器注册的 redirect URI 完全匹配再继续往下走——这一步能帮你避开 90% 的redirect_uri mismatch报错。 第二步处理回调用授权码换令牌浏览器带着code和state回到你的回调路由后skills/oauth/SKILL.md#L64-L85核心只有一行const tokenResponse await fastify.oauth2.getAccessTokenFromAuthorizationCodeFlow(request)fastify/oauth2会自动完成两件事校验 state 是否与会话一致以及用授权码换取令牌。拿到令牌后技能强调两条纪律✅ 把 access_token 和 refresh_token 存入session会话❌永远不要把原始令牌打进日志刷新令牌要妥善保管——它是第四步轮换的燃料。⏳ 第三步JWT 校验中间件——exp、iss、aud 一个都不能少换回令牌后真正的安全防线在校验。技能的verifyToken中间件skills/oauth/SKILL.md#L90-L114示范了完整的 JWT 校验姿势检查项含义不校验的后果签名验证令牌确实来自可信的签发方任何人可伪造令牌exp过期时间戳过期令牌依然可用iss签发者Issuer其他服务签的令牌被冒用aud受众Audience令牌被拿到另一个服务上复用sub用户主体标识无法确定这是谁两条经验来自技能的验证检查点RFC 7519 §4每个请求都校验不要跳过任何一项第三方服务器签发的令牌要用非对称算法RS256/ES256配合 JWKS 端点验证不要使用对称的 HS256验证通过后用fastify.addHook(onRequest, verifyToken)把中间件挂到路由作用域上skills/oauth/SKILL.md#L123-L139该作用域下所有接口都会自动受保护之后从request.user中读取用户身份即可。 第四步刷新令牌轮换——让被盗的令牌快速失效access_token 通常是短生命周期的比如 15 分钟到期后客户端用 refresh_token 去换新令牌。技能第 6 步skills/oauth/SKILL.md#L143-L153的refreshAccessToken函数体现了**轮换Rotation**策略用 refresh_token 请求新的令牌对如果授权服务器返回了新的 refresh_token立即用它替换本地存储的旧值RFC 6749 §10.4如果服务器没返回新值继续沿用原 refresh_token为什么要轮换因为攻击者即使偷走了你的旧 refresh_token只要你的应用已经把新令牌换上旧令牌下次再被使用时就会失败——盗窃的窗口期被压缩到最短异常使用还能触发告警。✅ 上线前对照OAuth 2.1 安全检查清单技能末尾附了一张可直接打印的清单skills/oauth/SKILL.md#L157-L167发布前逐项打勾要求规范出处redirect URI 必须在允许列表中校验RFC 6749 §3.1.2所有公共客户端启用 PKCES256RFC 7636 §4.2校验state防 CSRFRFC 6749 §10.12每个 JWT 都校验iss、aud、expRFC 7519 §4每次使用都轮换刷新令牌RFC 6749 §10.4全程 HTTPS拒绝 HTTP 的 redirect URIRFC 6749 §3.1.2.1对令牌端点做速率限制OAuth 2.1 §7 五大反模式新手最容易踩的坑技能的Common anti-patterns小节skills/oauth/SKILL.md#L171-L178列出了五个高频错误务必避开把令牌存进 localStorage→ 应使用HttpOnlySecureSameSiteStrict的 Cookie防 XSS 窃取跳过 audience 校验→ 令牌会跨服务被复用使用隐式流程→ OAuth 2.1 已废弃请改用授权码 PKCE在浏览器应用里接受response_typetoken→ 令牌出现在 URL 片段中会泄漏到日志和 Referer第三方令牌用 HS256 对称签名→ 应改用 RS256/ES256 JWKS 端点 延伸阅读仓库里的相关资料学完主线流程后可以继续深入这些文件技能入口与完整流程skills/oauth/SKILL.md技能元数据与能力说明skills/oauth/tile.jsonFastify 认证全场景JWT、刷新令牌、RBAC、API Key、限流skills/fastify/rules/authentication.md技能库总览README.md仓库结构与贡献指南AGENTS.mdSKILL.md末尾还指引了四个进阶方向可按需检索设备授权流程RFC 8628适合无浏览器设备、令牌校验进阶JWKS 轮换与不透明令牌内省、客户端凭据模式机器对机器认证、移动端原生应用流程RFC 8252 与自定义 URI 协议。 写在最后OAuth 2.1 听起来门槛很高但把流程拆开后只有四步配 PKCE → 换令牌 → 校验 JWT → 轮换刷新令牌。skills仓库的 oauth 技能把每一步的规范出处、验证检查点和常见陷阱都整理成了清单式指引——照着做就能得到一个经得起审计的 OAuth 2.1 实现。【免费下载链接】skillsMy own collection of skills for modern Node.js development项目地址: https://gitcode.com/gh_mirrors/skills15/skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?