client-id 和 client-secret 是怎么来的?手把手教你注册 OAuth2.0 应用(附 GitHub / 微信实操)

client-id 和 client-secret 是怎么来的?手把手教你注册 OAuth2.0 应用(附 GitHub / 微信实操)

视频看了几百小时还迷糊?关注我,几分钟让你秒懂!(发点评论可以给博主加热度哦)

🌟 一、先搞懂:client-id 和 client-secret 是什么?

在 OAuth2.0 中:

  • client-id:相当于你应用的“身份证号”,公开标识你的应用;
  • client-secret:相当于你应用的“密码”,必须严格保密,用于向授权服务器证明“我是合法应用”。
🔑 类比:client-id = 公司营业执照编号(谁都能查)client-secret = 公司法人私钥(绝不能泄露!)

它们由 OAuth2.0 授权平台(如 GitHub、Google、微信开放平台) 在你注册应用时生成。


🛠️ 二、正例:如何获取 client-id 和 client-secret?

✅ 场景 1:GitHub(标准 OAuth2.0 平台)

步骤 1:登录 GitHub → Settings → Developer settings
步骤 2:点击 “OAuth Apps” → “New OAuth App”

填写信息:

字段示例值说明
Application nameMy Spring Boot App应用名称(用户授权时会看到)
Homepage URLhttp://localhost:8080你的网站首页
Authorization callback URLhttp://localhost:8080/login/oauth2/code/github⚠️ 必须和 Spring Boot 配置一致
💡 回调地址格式:{your-domain}/login/oauth2/code/{registrationId}
Spring Security 默认路径就是如此!
步骤 3:点击 “Register Application”

✅ 成功后你会看到:

Client ID: a1b2c3d4e5f6g7h8i9j0 Client Secret: abcdef1234567890ghijklmn... (点击才能显示!) 
⚠️ 注意:client-secret只显示一次!务必立即复制保存,否则只能重置。

✅ 场景 2:微信开放平台(非标 OAuth2.0)

微信的流程稍有不同,但本质一样:

步骤 1:访问 微信开放平台 → 登录 → 管理中心 → 网站应用
步骤 2:创建“网站应用”并提交审核(需企业资质)

审核通过后,你会获得:

  • AppID → 相当于 client-id
  • AppSecret → 相当于 client-secret
💡 微信回调地址格式:https://your-domain/wx/callback(需 HTTPS)

🧩 三、Spring Boot 中如何使用?

拿到 client-idclient-secret 后,在 application.yml 中配置:

spring: security: oauth2: client: registration: github: # 自定义名称(如 github/google/wechat) client-id: a1b2c3d4e5f6g7h8i9j0 client-secret: abcdef1234567890ghijklmn... scope: read:user provider: github: authorization-uri: https://github.com/login/oauth/authorize token-uri: https://github.com/login/oauth/access_token user-info-uri: https://api.github.com/user user-name-attribute: id 
✅ 启动项目后,访问 /oauth2/authorization/github 即可触发登录流程。

❌ 四、反例:这些操作等于“自爆”!

反例 1:把 client-secret 提交到 Git 仓库

# application.yml client-secret: abc123... # ❌ 直接上传到 GitHub 公开仓库 
💥 后果:任何人拿到 secret 都能冒充你的应用,调用 API、盗取用户数据!

✅ 正确做法:

  • 或使用配置中心(Nacos、Apollo)、Vault 等密钥管理工具。

使用环境变量:

client-secret: ${GITHUB_CLIENT_SECRET} 

反例 2:在前端代码中硬编码 client-id / secret

// ❌ 前端 JS 中写死 const clientId = "a1b2c3..."; const clientSecret = "secret123"; // 千万不要! 
✅ Web 应用的 secret 只能存在于后端!前端最多用到 client-id(如 PKCE 模式)。

反例 3:随意填写回调地址

比如注册时填 http://localhost:8080/callback,但 Spring Boot 实际路径是 /login/oauth2/code/github

❌ 结果:授权服务器拒绝回调,报错:

✅ 解决方案:回调地址必须完全一致(包括协议、域名、端口、路径)


⚠️ 五、注意事项(小白必看)

问题说明
client-secret 泄露怎么办?立即在平台“重置 secret”,旧 secret 失效
本地开发能用 HTTP 吗?可以,但仅限 localhost127.0.0.1;公网部署必须 HTTPS
一个应用能有多个 secret 吗?GitHub 支持“多客户端密钥”,便于轮换;微信不支持
client-id 会被盗用吗?不会,因为没有 secret 无法换取 token(除非用 PKCE)

🔐 六、安全最佳实践

  1. 永远不要提交 secret 到代码仓库
  2. 生产环境使用 HTTPS + 严格的回调地址白名单
  3. 定期轮换 client-secret(尤其团队人员变动时);
  4. 最小权限原则:只申请必要的 scope(如 GitHub 用 read:user 而非 user);
  5. 监控异常调用:如突然大量 token 申请,可能是 secret 泄露。

✅ 总结

  • client-idclient-secretOAuth2.0 平台在你注册应用时生成
  • 注册时需提供 应用名称 + 回调地址
  • client-id 可公开,client-secret 必须保密;
  • Spring Boot 通过 application.yml 配置即可自动集成;
  • 泄露 secret = 交出应用控制权,务必谨慎!
视频看了几百小时还迷糊?关注我,几分钟让你秒懂!(发点评论可以给博主加热度哦)

Read more

【Mac 上命令行安装 Claude Code】(Claude 的终端版 AI 编程助手)完整指南

【Mac 上命令行安装 Claude Code】(Claude 的终端版 AI 编程助手)完整指南

文章目录 * 前言 * 方式一:最简单一行命令(强烈推荐) * 方式二:Homebrew 安装(如果你已经用 brew 管理软件) * 方式三:npm 全局安装(适合已有 Node.js 环境) * 首次运行 & 认证(所有方式通用) * 推荐使用技巧 前言 若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力!有问题请私信或联系邮箱:[email protected] Claude Code 是 Anthropic 官方推出的终端 AI 编码代理(CLI 工具),它能直接在你的项目目录里读懂代码库、写/改代码、运行 git、调试、执行 bash 命令等,

By Ne0inhk
Flutter for OpenHarmony:Flutter 三方库 os_detect — 精准洞察鸿蒙系统的底层脉络(适配鸿蒙 HarmonyOS Next ohos)

Flutter for OpenHarmony:Flutter 三方库 os_detect — 精准洞察鸿蒙系统的底层脉络(适配鸿蒙 HarmonyOS Next ohos)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net。 Flutter for OpenHarmony:Flutter 三方库 os_detect — 精准洞察鸿蒙系统的底层脉络(适配鸿蒙 HarmonyOS Next ohos) 在进行 Flutter for OpenHarmony 跨平台开发时,我们经常需要处理“差异化”的需求。有的功能可能只在真正的 OpenHarmony 原生环境下运行(如特定的 N-API 调用),而在 Web 或其他桌面模拟器环境下则需要进行降级处理。 传统的 Platform.isAndroid 或 kIsWeb 在处理日渐复杂的鸿蒙生态环境时,往往显得力不从心。os_detect 库提供了一套更轻量、更可靠的系统环境感知方案,能帮助我们精准识别应用正跑在哪个“灵魂”之下。 一、为什么需要系统环境检测?

By Ne0inhk
Linux匿名管道通信:原理深挖+代码实现,一篇吃透进程间数据流转

Linux匿名管道通信:原理深挖+代码实现,一篇吃透进程间数据流转

🔥个人主页:Cx330🌸 ❄️个人专栏:《C语言》《LeetCode刷题集》《数据结构-初阶》《C++知识分享》 《优选算法指南-必刷经典100题》《Linux操作系统》:从入门到入魔 《Git深度解析》:版本管理实战全解 🌟心向往之行必能至 🎥Cx330🌸的简介: 目录 前言: 一. 进程间通信介绍 1.1 进程间通信目的 1.2 进程间通信的发展与分类 二、先搞懂:什么是管道?匿名管道有何特殊性? 2.1 管道的本质 2.2 管道的核心特性 三、匿名管道的创建 3.1 匿名管道的创建流程 3.2 匿名管道的使用示例 四. 核心深挖:匿名管道的底层原理 4.1 fork

By Ne0inhk
Flutter 三方库 index_generator — 赋能鸿蒙大型项目自动化生成 Export 导出索引,消除繁琐 Import 片段工程化利器(适配鸿蒙 HarmonyOS Next ohos

Flutter 三方库 index_generator — 赋能鸿蒙大型项目自动化生成 Export 导出索引,消除繁琐 Import 片段工程化利器(适配鸿蒙 HarmonyOS Next ohos

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net。 Flutter 三方库 index_generator — 赋能鸿蒙大型项目自动化生成 Export 导出索引,消除繁琐 Import 片段的工程化利器(适配鸿蒙 HarmonyOS Next ohos) 前言 在华为鸿蒙(OpenHarmony)生态的深度开发中,随着业务组件和模型类的爆发式增长,开发者经常会陷入“Import 迷宫”。当你需要引用某个页面时,发现上方堆叠了数十行细碎的文件引用,这不仅影响代码的可读性,更让后续的重构工作(如移动目录)变得极其痛苦。 index_generator 是一款极其高效的命令行工具。它能根据你定义的配置文件,自动扫描指定目录并生成一个统一的“索引文件(Barrel File,通常为 index.dart)”,将目录下的所有组件一键导出。在构建鸿蒙平台的复杂多模块(Multi-module)工程、管理庞大的 UI

By Ne0inhk