news 2026/6/10 20:04:28

孤舟笔记 分布式与微服务篇二十 OAuth到底是啥?面试总问但总说不清,看完这篇再也不怕

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
孤舟笔记 分布式与微服务篇二十 OAuth到底是啥?面试总问但总说不清,看完这篇再也不怕

文章目录

    • 先说结论
    • 核心角色
    • 四种授权模式
      • 授权码模式(最安全,最常用)
      • 隐式模式(已不推荐)
      • 密码模式
      • 客户端凭证模式
    • Token:Access Token + Refresh Token
    • OAuth vs JWT
    • 回答技巧与点评
      • 加分回答
      • 面试官点评

个人网站

“用微信登录”——这个按钮背后就是 OAuth。很多人用过 OAuth 但讲不清它是什么,和 JWT 是什么关系。面试官问这题,他想听的是:你能不能讲清 OAuth 2.0 的四种授权模式、Token 的工作流程、以及和 JWT 的区别?

先说结论

维度说明
是啥开放授权协议,让用户授权第三方应用访问自己的资源
核心让用户不用把密码告诉第三方,也能授权其访问
版本OAuth 2.0(主流)
四种模式授权码、隐式、密码、客户端凭证
最常用授权码模式(微信/QQ/Google 登录都用它)
和 JWT 关系OAuth 是协议,JWT 是 Token 格式

|一句话记住:OAuth就像"酒店房卡"——你授权前台给朋友发一张临时房卡,朋友能进房间但不知道你的身份证号"

核心角色

┌──────────┐ 1.授权请求 ┌──────────┐ │ │ ──────────────→ │ │ │ 客户端 │ │ 资源 │ │ (第三方App)│ ←────────────── │ 所有者 │ 👈 用户 │ │ 2.用户同意 │ (你) │ └────┬─────┘ └──────────┘ │ │ 3.授权码 ↓ ┌──────────┐ 4.授权码+密钥 ┌──────────┐ │ │ ──────────────→ │ │ │ 客户端 │ │ 授权 │ │ │ ←────────────── │ 服务器 │ 👈 微信/QQ │ │ 5.访问令牌 │ │ └────┬─────┘ └──────────┘ │ │ 6.访问令牌 ↓ ┌──────────┐ 7.受保护的资源 ┌──────────┐ │ │ ──────────────→ │ │ │ 客户端 │ │ 资源 │ │ │ ←────────────── │ 服务器 │ └──────────┘ 8.资源数据 └──────────┘
  • 资源所有者:你(用户)
  • 客户端:第三方应用(如"用微信登录"的那个网站)
  • 授权服务器:微信的认证服务器
  • 资源服务器:微信的用户信息服务器

四种授权模式

授权码模式(最安全,最常用)

1. 用户点"用微信登录" → 跳转微信授权页 2. 用户在微信页点"同意" → 微信返回授权码(code) 3. 第三方网站用 code + 密钥 → 向微信换 Token 👈 4. 微信返回 Access Token 5. 第三方网站用 Token → 获取用户信息

为什么最安全?用户密码只在微信页面输入,第三方网站只拿到授权码,授权码还要配合密钥才能换 Token。而且密钥存在服务端,不会暴露给浏览器。

隐式模式(已不推荐)

1. 用户点"用微信登录" → 跳转微信授权页 2. 用户同意 → 微信直接返回 Token(在URL fragment中) 3. 浏览器提取 Token → 直接用 👈

Token 直接暴露在浏览器中,容易被截获。OAuth 2.1 已废弃此模式。

密码模式

1. 用户直接把微信账号密码给第三方网站 👈 2. 网站用密码向微信换 Token

只适合自家应用(第一方),第三方绝对不能用。

客户端凭证模式

1. 第三方用 client_id + client_secret 直接换 Token 2. 不需要用户参与 👈

适合服务间调用(机器对机器),不涉及用户授权。

模式用户参与安全性场景
授权码第三方登录
隐式低(已废弃)旧SPA
密码第一方应用
客户端凭证服务间调用

Token:Access Token + Refresh Token

Access Token: ├── 用来访问资源 ├── 有效期短(通常2小时) └── 泄露风险可控 Refresh Token: ├── 用来换新的 Access Token ├── 有效期长(通常30天) └── 只在服务端使用,不暴露给浏览器 👈
// 用 Refresh Token 换新的 Access TokenPOST/oauth/token grant_type=refresh_token&refresh_token=xxx// 返回新的 Access Token + 新的 Refresh Token

为什么两个 Token?就像银行卡——Access Token 是"储蓄卡"(日常用,丢了损失小),Refresh Token 是"U 盾"(不常用,安全级别高,用来办新卡)。

OAuth vs JWT

对比OAuth 2.0JWT
本质授权协议Token 格式
解决什么怎么授权怎么传令牌
关系OAuth 可以用 JWT 作为 Token 格式

OAuth 定义的是"授权流程"(怎么获取 Token),JWT 定义的是"Token 的数据格式"(自包含的用户信息)。两者不冲突——OAuth 的 Access Token 可以是 JWT 格式。

OAuth 全景 四种模式 ├── 授权码 —— 最安全,第三方登录用 ├── 隐式 —— 已废弃 ├── 密码 —— 第一方应用 └── 客户端凭证 —— 服务间调用 Token ├── Access Token —— 访问资源,短期 └── Refresh Token —— 刷新令牌,长期 与JWT关系 ├── OAuth —— 协议(怎么授权) ├── JWT —— 格式(令牌长什么样) └── OAuth可以用JWT作为Token格式 口诀:OAuth开放授权协议,四种模式分场景; 授权码最安全,第三方登录用它; 双Token长短搭配,Access用Refresh换; OAuth是协议JWT是格式,两者搭配最常见

回答技巧与点评

标准回答:OAuth 2.0 是开放授权协议,让用户授权第三方应用访问自己的资源,无需暴露密码。四种授权模式:授权码模式(最安全,第三方登录用)、隐式模式(已废弃)、密码模式(第一方应用)、客户端凭证模式(服务间调用)。Token 分 Access Token(短期,访问资源)和 Refresh Token(长期,刷新令牌)。OAuth 是协议,JWT 是 Token 格式,两者不冲突。

加分回答

  1. 授权码 + PKCE:移动端 App 无法安全保存 client_secret,OAuth 2.0 引入 PKCE(Proof Key for Code Exchange),用动态生成的 code_verifier 替代密钥,防止授权码被截获
  2. Spring Security OAuth:Spring 生态的 OAuth 实现,但官方已停止维护,推荐用 Spring Authorization Server 替代。配置方式从 XML → 注解 → 函数式不断演进
  3. OAuth 2.1 的变化:隐式模式和密码模式被移除,只保留授权码模式(+PKCE)和客户端凭证模式。安全优先,简化了协议

面试官点评

这道题考的是你对授权认证协议的理解。最忌讳的回答是混淆 OAuth 和 JWT——面试官想听的是OAuth 的核心流程(四种模式)和Token 机制(双 Token)。能画出授权码模式的流程图,再说出 OAuth 和 JWT 的关系,就是高分回答。

原文阅读


内容有帮助?点赞、收藏、关注三连!评论区等你 💪

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 20:00:40

2026年怎么降低论文AIGC率?7种高效方法必收藏!

最近学校对论文原创性的要求真的越来越严了!好多直接把AIGC率纳入核心考核指标——要是AI痕迹太重,别说评优拿奖学金,能不能顺利过审都悬!别慌,除了手动调整,我整理了几个亲测有效的降AI小技巧,…

作者头像 李华
网站建设 2026/6/10 19:59:25

【UE5】雷达覆盖区域效果

目录 效果 步骤 一、启用插件 二、制作雷达材质 三、创建雷达Actor 效果 雷达覆盖区域效果如下,可修改“覆盖区域半径”、“水平夹角”、“垂直夹角”、“圆弧细分数”、“垂直细分数”参数 步骤 一、启用插件 启动“Procedural Mesh Component”插件

作者头像 李华
网站建设 2026/6/10 19:58:53

【Redis分布式缓存实战】第22章 企业级Redis缓存项目架构复盘

电商平台全链路缓存架构复盘一、复盘概述1.1 复盘背景电商平台是典型的读多写少、峰值流量集中、数据热度分层明显的高并发业务场景,日常商品浏览、用户访问、购物车操作流量平稳,大促、秒杀、直播间带货场景下瞬时QPS会暴涨10-50倍,纯MySQL数…

作者头像 李华
网站建设 2026/6/10 19:52:21

Web分布式网站架构之-Squid缓存【20260608】004篇-【传统代理】

文章目录 CentOS 7.9 + Win10 搭建 Squid **传统代理** 完整实验手册 一、实验环境规划 1. 主机IP与角色 2. 前置准备(CentOS 7.9 统一操作) (1)关闭防火墙 & SELinux (2)测试网络互通 二、方式选择:YUM 安装 Squid(推荐,简单稳定) 1. 安装 Squid 2. 查看默认信息…

作者头像 李华
网站建设 2026/6/10 19:43:24

dubbo和oppenFeign是如何找到正确的url请求地址的

这个问题本质是在问一句话:动态代理只是入口,真正“找到 URL/地址”的是“服务发现 本地缓存 负载均衡”。Dubbo 和 OpenFeign 都是“代理 路由系统”,但实现路径不一样。一、核心结论(先记住)Dubbo: 注…

作者头像 李华