当前位置: 首页 > news >正文

别再把 OIDC 和 OAuth 2.0 搞混了:写给开发者的通俗指南

🔑 别再把 OIDC 和 OAuth 2.0 搞混了:写给开发者的通俗指南

在现代 Web 开发中,我们几乎每天都在和“第三方登录”打交道。无论是“使用 GitHub 登录”还是“使用微信扫码”,背后都离不开两个如雷贯耳的名字:OAuth 2.0OIDC (OpenID Connect)

这两个概念经常像连体婴儿一样同时出现,导致很多开发者误以为它们是同一个东西。但事实上,它们解决的是两个截然不同的核心问题:授权(Authorization)认证(Authentication)

今天,我们就用最通俗的语言,彻底理清它们的恩怨情仇。


1. OAuth 2.0:只认“门禁卡”,不认人

OAuth 2.0 诞生得比较早,它的核心使命只有一个:授权(Authorization)。也就是说,它用来决定“你能做什么”。

🏢 核心类比:酒店的电子房卡
想象你去住酒店,前台给你发了一张电子房卡。你可以用这张卡刷开 302 房间的门,也可以刷开酒店健身房的门。
但是,门禁系统并不知道你是谁。它只认卡不认人。就算这卡是你捡来的,只要卡是真的,门就会开。

在 OAuth 2.0 的世界里,这张“房卡”叫做Access Token(访问令牌)
当你的应用拿到 Access Token 后,就可以代表用户去调用第三方平台的 API(比如读取他的 GitHub 仓库,或者操作他的百度网盘)。至于屏幕前的这个用户叫什么名字、长什么样,纯粹的 OAuth 2.0 是不管的。


2. OIDC:站在巨人肩膀上的“身份证”

随着时间推移,开发者们发现了一个大问题:我们需要单点登录(SSO)!我们需要知道用户到底是谁!

早期,大家只能拿着 OAuth 2.0 的 Access Token 去强行客串“认证”功能——拿着 Token 去调一次对方的/user接口,看看返回什么名字。但这导致了极大的混乱,因为每个大厂的接口格式都不一样。

为了解决这个问题,OIDC (OpenID Connect)诞生了。它不是来替代 OAuth 2.0 的,而是构建在 OAuth 2.0 之上的一个扩展协议。它专门负责:认证(Authentication)

🪪 核心类比:带照片的员工胸牌
OIDC 就像是你在公司佩戴的员工胸牌。上面印着你的名字、部门、照片,并且盖了公司行政部的公章。
保安(第三方应用)只要低头看一眼你的胸牌,就能瞬间确认你的身份,根本不需要打电话给行政部确认。

在 OIDC 的世界里,这张“胸牌”叫做ID Token。它通常是一个JWT (JSON Web Token)

解码一个典型的 ID Token,你会看到类似这样的标准化信息:

{"iss":"https://accounts.google.com",// 颁发者:证明这是 Google 盖章的"sub":"10023948576",// 用户的唯一 ID"name":"刘伟清",// 用户的真实姓名"email":"developer@example.com",// 用户的邮箱"exp":1680000000// 凭证过期时间}

3. 终极拷问:为什么有了 Access Token,还要搞个 ID Token?

很多开发者会问:“既然我能用 Access Token 去请求 API 拿到用户信息,为什么 OIDC 非要多发明一个 ID Token 呢?”

核心原因在于性能标准化

  1. 零网络延迟:
    使用 Access Token,你的服务器必须发起一次 HTTP 网络请求去问第三方平台“这人是谁”。而 ID Token 是一个自带签名的 JWT。你的应用拿到它后,在本地直接解码校验即可,省去了一次耗时的网络往返。
  2. 天下同文:
    如果没有 OIDC,你接 GitHub 登录要解析login字段,接 Twitter 要解析screen_name。而 OIDC 强制规定了所有平台必须使用标准的字段名(如name,email等),让你的一套代码可以吃遍天下。

4. 总结:我到底该用哪个?

在实际的架构设计中,请对号入座:

  • 👉 场景 A:机器与机器通信 (M2M) / 纯后端调用

  • 你的需求:你的后端服务需要定时去调用另一个微服务的接口。

  • 你的选择:纯 OAuth 2.0。这里根本没有“人类用户”,不需要验证身份,只要用客户端凭证换个 Access Token 即可。

  • 👉 场景 B:单纯的第三方登录 (SSO)

  • 你的需求:你开发了一个独立论坛,只想让用户“微信扫码一键登录”自动注册账号。

  • 你的选择:OIDC。你只需要拿到 ID Token 解析出用户的基本信息即可,拿完就走,不需要后续权限。

  • 👉 场景 C:既要认人,又要干活(最常见)

  • 你的需求:你的工具需要用户使用 Google 登录,并且还要帮用户自动往 Google 日历里写日程。

  • 你的选择:OIDC + OAuth 2.0 混合双打。认证时拿到 ID Token 建立本地会话,同时拿到 Access Token 去请求 Google Calendar API。

理清了这两者的关系,下次再面对错综复杂的鉴权平台文档时,你就能一眼看穿它们底层的运转逻辑了。运转逻辑了。


http://www.zskr.cn/news/1324956.html

相关文章:

  • Keil MDK中EVR选项缺失的解决方案与原理
  • 2026年文献翻译格式全丢?研究生亲测5款工具,只有Scholaread能完美保留公式图表(附对比)
  • Android Q以上版本,用MediaProjection录屏时遇到的3个坑和我的填坑记录
  • Visio‘自动吸附’功能全解析:从烦人到真香,教你设置出丝滑的绘图体验
  • 用Logisim和Mars仿真器,从零搭建一个能跑程序的32位MIPS CPU(附完整工程文件)
  • 2026年四川寻人服务机构TOP5排行及联系方式参考:四川,成都,四川出轨调查/四川商务调查/四川失联亲友查找/选择指南 - 优质品牌商家
  • DeepSeek LeetCode 2503.矩阵查询可获得的最大分数 public int[] maxPoints(int[][] grid, int[] queries)
  • 别再只算截止频率了!二阶有源低通滤波器设计,如何用Multisim仿真避开这些坑?
  • 千问 LeetCode 2499.让数组不相等的最小总代价 public long minimumTotalCost(int[] nums1, int[] nums2)
  • 多芯片集成VQC:突破NISQ量子计算瓶颈的新方案
  • 微信小程序里长按图片识别二维码,用wx.scanCode和bindlongpress就能搞定(附完整代码)
  • 产品经理如何利用Taotoken模型广场为AIGC功能选型
  • 2026年腔镜器械消毒盒平台深度解析:为何泽正丝网制品成为可靠选择? - 2026年企业推荐榜
  • 别再搞混了!CAN总线ACK位到底是‘来者不拒’还是‘挑食’?一个实验带你彻底搞懂
  • 2026门店管理系统怎么选 ?文末附搭建流程
  • 从Ubuntu 16.04到自定义Rootfs:Firefly-RK3399系统镜像DIY全记录
  • Tampermonkey显示某些URL受到浏览器或设置限制!
  • 收藏!一张图带你彻底搞懂,能落地的RAG系统长啥样?
  • 头歌模型构建 —— Inception
  • 别再混淆了!一文理清华为云Stack里FusionStorage、OceanStor Pacific与存储服务的对应关系
  • 深度解析:Copymanga第三方Android客户端架构设计与技术实现
  • 数智协同,赋能康养服务高效升级
  • 精准管控慢病,守护长者健康
  • 北京研华交通工控机
  • 【笔记】旧AI,新人类
  • 国际半导体全产业链展会推荐:深化跨国产业合作拓宽资源对接渠道 - 品牌2025
  • AI Coding 为什么全选了 TUI?从 Claude Code 到 Codex CLI,终端架构的底层逻辑
  • QGIS加载高德地图总对不上?手把手教你搞定GCJ02坐标偏移(附插件安装)
  • 三分钟搞定安卓连接难题:Windows版ADB驱动一键安装终极指南
  • BilibiliDown完整指南:三步搞定B站视频批量下载与高效管理