首页 / 资讯中心 / 文章详情

GitHub Profile Analyzer认证体系详解:GitHub OAuth+AES-256-GCM加密会话

GitHub Profile Analyzer认证体系详解:GitHub OAuth+AES-256-GCM加密会话 ★ FEATURED ARTICLE
【免费下载链接】github-profile-analyzerGithub Profile analyzer or analyser and reviewer tool. Gives review based on first 100 repos and only includes those forks in which user has contributions to avoid fake results | #1 profile analyzer on github项目地址https://gitcode.com/gh_mirrors/gi/github-profile-analyzer点击查看免费下载GitHub Profile Analyzer是一款免费的 GitHub 个人资料分析工具它会扫描你的前 100 个仓库仅保留有真实贡献的 Fork并生成带评分与改进建议的分析报告。为了让每位用户都能安全地运行分析项目构建了一套双轨认证体系完整的 GitHub OAuth 登录 基于 AES-256-GCM 加密的会话与令牌存储。本文用通俗的方式拆解它的登录流程、JWT 会话机制和数据库加密细节。 认证体系全景双轨设计GitHub Profile Analyzer 提供两条进入分析的通道安全级别和权限各不相同通道进入方式权限限制完整账户GitHub OAuth 登录无限次扫描、保存历史、设置主页报告需授权read:user范围访客模式验证你 Star 过该项目使用核心分析功能每 15 分钟最多 5 次请求这种设计既降低了新用户的使用门槛又通过限流和Star 门禁防止 API 资源被滥用。核心实现分布在几个模块会话管理src/lib/auth.ts加密模块src/lib/encryption.tsOAuth 路由src/app/api/auth/github/route.ts访客验证src/app/api/auth/verify-guest/route.ts 如何完成 GitHub OAuth 登录三步走详解第一步生成 state 并跳转授权页当你点击登录后端路由 src/app/api/auth/github/route.ts 会做三件事用crypto.randomUUID()生成一个随机的state参数把它写入名为oauth_state的 HttpOnly Cookie有效期 10 分钟将浏览器重定向到 GitHub 授权页仅请求read:user这个最小权限范围——项目只需要读取你的公开身份信息不碰你的仓库和代码。state参数是防止 CSRF 攻击的标准做法攻击者无法伪造一个与你 Cookie 中匹配的随机值。第二步回调校验与令牌交换授权完成后GitHub 会带着code和state跳回回调路由 src/app/api/auth/github/callback/route.ts。这里有一个严格的安检门请求中的state必须与 Cookie 中存储的值完全一致否则直接返回invalid_state错误缺少授权码则返回no_code校验通过后后端在服务端用client_idclient_secretcode交换access_token随后调用用户接口获取你的id、login、avatar_url。整个交换过程设置了 10 秒超时AbortSignal.timeout避免慢请求拖垮服务端。任何一步失败都会触发 Telegram 告警并跳转到友好的错误页而不是抛出裸错误。第三步创建 JWT 会话拿到用户信息后回调路由调用upsertUser写入数据库令牌先加密见下文再通过 createSession 把会话信息签发成HS256 签名的 JWT写入名为gitscore_session的 Cookie有效期7 天。 JWT 会话内幕gitscore_session 如何工作Session 结构 包含四个字段githubId、username、accessToken、avatarUrl。几个值得注意的安全设计① Cookie 加固参数httpOnly前端 JS 读不到、sameSite: lax防跨站请求夹带、生产环境强制secure仅 HTTPS 传输。② 严格的字段校验verifySession 在验证签名之后还会逐一检查四个字段的类型与合法性——缺少任何必需字段都会返回null防止静默的 undefined 传播到下游逻辑。③ 令牌绝不返回前端前端通过 fetchAuthIdentity 查询自己的身份时me 接口 会刻意把accessToken从响应中剔除。你的 GitHub 令牌只存在于服务端浏览器永远拿不到它。④ 一键登出调用 logout 接口 会同时清除gitscore_session和gitscore_guest两个 Cookie不留任何会话残留。️ 数据库加密AES-256-GCM 守护访问令牌虽然令牌不会发给浏览器但它需要持久化到数据库供后续扫描使用。GitHub Profile Analyzer 在 src/lib/encryption.ts 中实现了字段级加密密钥来自环境变量ENCRYPTION_SECRET必须是64 位十六进制字符串即 32 字节 / 256 位密钥格式不对则服务直接启动失败fail-fast见 密钥校验逻辑算法为AES-GCM每次加密随机生成12 字节 IV初始化向量输出16 字节认证标签加密产物按iv:authTag:ciphertext的十六进制格式存储见 encrypt 函数。为什么选 GCM 模式它同时提供保密性和完整性密文被篡改哪怕一个字节decrypt 也会因认证标签不匹配而失败并抛出DECRYPTION_FAILURE错误——数据库里不存在看起来正常但实际损坏的数据。在 upsertUser 中令牌在入库前执行encrypt()读取时由 materializeUser 按需decrypt()默认路径不取令牌则直接返回空字符串把解密开销控制在最小。⭐ 访客模式用 Star 验证换取入场券不想登录也能用GitHub Profile Analyzer 提供了一条Star 门禁通道访客提交自己的用户名请求 verify-guest 路由后端调用 verifyAndInjectStar按优先级执行多重检查D1 本地数据库O(1) 查询历史已验证的 Star 用户Redis 缓存1 小时有效期的单用户缓存双向 GraphQL 扫描同时从你的 Star 列表和仓库的 Star 用户列表两端向中间逼近命中即止REST 分页回退作为最后的兜底方案。验证通过后createGuestSession 签发一个仅1 小时有效的访客 JWTgitscore_guestCookie。同时middleware 对所有未登录 API 请求执行滑动窗口限流每 15 分钟最多 5 次。配额耗尽时返回 429 并提示集成 GitHub 获得无限访问——访客体验与转化引导巧妙地结合在一起。 其他安全细节从请求到告警认证体系之外src/middleware.ts 还为每个请求加了一道全局防线跨域校验Origin与Host不一致直接 403阻断跨站 API 调用安全响应头HSTS强制 HTTPS 一年、X-Frame-Options: DENY防点击劫持、严格 CSP 策略见 applySecurityHeadersJWT 预校验API 路由在限流前先验证会话令牌已登录用户不受访客配额限制故障告警OAuth 回调失败、加解密异常、访客验证协议失败等关键错误都会通过 sendTelegramAlert 实时推送到维护者的 Telegram做到故障不过夜。 总结一张图看懂认证链路浏览器 ──点击登录──▶ OAuth 路由生成 state ◀──302── GitHub 授权页用户授权 read:user ──带 code──▶ 回调路由校验 state → 换令牌 → 加密入库 ◀──Set-Cookie── gitscore_sessionJWT7 天 后续请求 ──▶ Middleware 校验 JWT ──▶ 业务 APIGitHub Profile Analyzer 的认证体系体现了一个清晰的原则最小权限、纵深防御。OAuth 只索取read:userstate 参数防 CSRFJWT 字段级校验防脏数据AES-256-GCM 保证落盘令牌既机密又完整限流与告警则是最后的安全网。对于想了解一个中小型开源项目如何把登录做安全的开发者来说这套实现是一个非常值得参考的完整样本。 核心源码索引会话与令牌src/lib/auth.tsAES-256-GCM 加密src/lib/encryption.tsOAuth 发起与回调src/app/api/auth/github/Star 门禁src/lib/github/star-gate.ts用户存取与加密入库src/lib/db.ts全局安全中间件src/middleware.ts赞分享【免费下载链接】github-profile-analyzerGithub Profile analyzer or analyser and reviewer tool. Gives review based on first 100 repos and only includes those forks in which user has contributions to avoid fake results | #1 profile analyzer on github项目地址https://gitcode.com/gh_mirrors/gi/github-profile-analyzer点击查看免费下载相关推荐openJiuwen agent-core 通用模块安全加密实践基于 CryptUtils 的 AES-256-GCM 加解密体系解析openJiuwen agent core 通用模块安全加密实践基于 CryptUtils 的 AES 256 GCM 加解密体系解析 导读 本文基于 ope人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习openJiuwen agent-core 加密解密抽象层详解CryptUtils 注册表与 AES-256-GCM 实战指南openJiuwen agent core 加密解密抽象层详解CryptUtils 注册表与 AES 256 GCM 实战指南 本篇技术指南深入剖析 open人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习RelayPulse安全架构全解AES-256-GCM密钥加密、HMAC测试证明与Key黑名单RelayPulse安全架构全解AES 256 GCM密钥加密、HMAC测试证明与Key黑名单 RelayPulse 是一套企业级 LLM 中转服务可用性监控上一篇Madeira 项目技术架构深度解析在非越狱 iPhone 上运行 x86-64 Windows 游戏的全栈方案下一篇OmniWM 社区与生态完整指南如何参与贡献、报告问题并发现 Raycast 集成创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站