孤舟笔记 分布式与微服务篇二十 OAuth到底是啥?面试总问但总说不清,看完这篇再也不怕
文章目录先说结论核心角色四种授权模式授权码模式最安全最常用隐式模式已不推荐密码模式客户端凭证模式TokenAccess Token Refresh TokenOAuth 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密码是中第一方应用客户端凭证否高服务间调用TokenAccess Token Refresh TokenAccess Token ├── 用来访问资源 ├── 有效期短通常2小时 └── 泄露风险可控 Refresh Token ├── 用来换新的 Access Token ├── 有效期长通常30天 └── 只在服务端使用不暴露给浏览器 // 用 Refresh Token 换新的 Access TokenPOST/oauth/token grant_typerefresh_tokenrefresh_tokenxxx// 返回新的 Access Token 新的 Refresh Token为什么两个 Token就像银行卡——Access Token 是储蓄卡日常用丢了损失小Refresh Token 是U 盾不常用安全级别高用来办新卡。OAuth vs JWT对比OAuth 2.0JWT本质授权协议Token 格式解决什么怎么授权怎么传令牌关系OAuth 可以用 JWT 作为 Token 格式OAuth 定义的是授权流程怎么获取 TokenJWT 定义的是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 格式两者不冲突。加分回答授权码 PKCE移动端 App 无法安全保存 client_secretOAuth 2.0 引入 PKCEProof Key for Code Exchange用动态生成的 code_verifier 替代密钥防止授权码被截获Spring Security OAuthSpring 生态的 OAuth 实现但官方已停止维护推荐用 Spring Authorization Server 替代。配置方式从 XML → 注解 → 函数式不断演进OAuth 2.1 的变化隐式模式和密码模式被移除只保留授权码模式PKCE和客户端凭证模式。安全优先简化了协议面试官点评这道题考的是你对授权认证协议的理解。最忌讳的回答是混淆 OAuth 和 JWT——面试官想听的是OAuth 的核心流程四种模式和Token 机制双 Token。能画出授权码模式的流程图再说出 OAuth 和 JWT 的关系就是高分回答。原文阅读内容有帮助点赞、收藏、关注三连评论区等你