news 2026/4/15 1:11:15

OAuth2.0 + 授权码模式 + Token+JWT

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OAuth2.0 + 授权码模式 + Token+JWT

面试官:请你完整讲一下如何实现第三方授权登录?要求讲清 OAuth 2.0、授权码模式、Token 机制、JWT。

这道题一旦答顺,中高级岗位直接加分!我会用最通俗、最能直接背、面试直接复述的方式,把四个核心知识点全部串起来讲透!

一、先一句话总述(面试开头这样说,直接镇住面试官)

第三方授权登录基于 OAuth 2.0 协议,最安全的方式是使用授权码模式

流程中会用到 Token 完成身份凭证传递

最终我们自己的业务系统会用 JWT 生成无状态登录态,完成用户登录。

二、什么是 OAuth 2.0?(必须讲清楚)

OAuth 2.0 是一个开放的授权协议,用来让第三方应用安全获取用户在其他平台的授权,而不需要用户泄露账号密码。

你可以这样背:

  • 它不是一种技术,是一套授权标准

  • 目的:让 A 平台能安全访问 B 平台的用户信息

  • 核心:授权、安全、隔离

  • 解决问题:用户不用给你账号密码,就能让你登录

四个角色必须记住(面试必问):

  • 用户(Resource Owner)
  • 第三方平台(微信 / QQ/GitHub 认证服务)
  • 客户端(你的前端 / APP)
  • 资源服务器(你的后端系统)

三、什么是授权码模式?(最安全、最标准、必须讲流程)

授权码模式(Authorization Code)是 OAuth 2.0 中最安全、最推荐、企业级项目唯一使用的模式。

流程(面试直接复述,满分)

  • 前端跳转到第三方授权页

    携带:client_id、redirect_uri、response_type=code、state

  • 用户同意授权

  • 第三方返回 授权码 code

    跳回你的地址,code 临时、一次性、短时效

  • 后端拿 code 换 access_token

    后端请求第三方接口,带上:code + client_id + client_secret

  • 获取 access_token

    代表用户授权的凭证

  • 用 token 获取用户信息(openid / 头像 / 昵称)

  • 完成登录

为什么必须用授权码模式?

  • token 永远不会暴露给前端

    最安全

  • code 只能用一次

    防窃取

  • client_secret 保存在后端

    不泄露

  • 支持 PC、H5、APP、小程序全平台

四、什么是 Token 机制?(必须讲清楚作用)

Token 就是一个 “临时身份凭证”,相当于一张临时通行证。

你要讲三点:

  1. Token 是后端颁发的字符串
  2. 用来代替传统的 Session
  3. 每次请求携带,服务端验证有效性

第三方登录里的 Token 分两种:

  1. access_token

    从微信 / QQ 获取,用来拿用户信息

  2. 业务 Token

    我们自己后端生成,给前端登录用

Token 特点:

  • 无状态

  • 跨域支持

  • 可设置过期

  • 适合分布式系统

五、什么是 JWT?(必须讲结构 + 作用 + 优势)

JWT = JSON Web Token,是目前最流行的 Token 实现方案。

一句话总结:JWT 就是一种可以自包含信息、可加密、可验签、服务端不用存 Session 的 Token 格式。

JWT 三部分结构(面试必问)

  • Header(头部)

    算法 + 类型

  • Payload(负载)

    存放用户 ID、过期时间

  • Signature(签名)

    密钥签名,防篡改

JWT 在第三方登录中的作用

  1. 我们通过授权码拿到用户信息

  2. 后端生成 JWT

  3. 返回给前端

  4. 前端每次请求携带 JWT

  5. 后端验证 JWT 有效性,识别用户

JWT 优势(面试加分)

  • 无状态,不存 Session

  • 分布式 / 微服务天然支持

  • 跨域稳定

  • 安全、可过期、可加密

六、把四者串起来:完整第三方登录流程(面试满分答案)

我给你一段可以直接背、直接复述的标准答案:

实现第三方授权登录,整体基于OAuth 2.0 协议,采用最安全的授权码模式完成授权流程,最终使用Token 机制维持登录状态,而我们自己的业务登录态则使用JWT实现。

具体流程如下:

  • 用户点击第三方登录,前端跳转到第三方授权页面。

  • 用户授权后,第三方返回一个临时的授权码 code

  • 后端使用 code 向第三方平台换取access_token

  • 通过 access_token 获取用户唯一标识(openid)和用户信息。

  • 系统判断用户是否存在:

  • 不存在 → 自动注册

  • 已存在 → 直接登录

  • 后端根据用户信息生成JWT并返回前端。

  • 前端后续请求携带 JWT,后端验证通过后完成鉴权。

整个流程中:

  • OAuth2.0

    提供授权标准

  • 授权码模式

    保证安全性

  • Token

    完成授权凭证传递

  • JWT

    实现无状态登录态


七、面试官最爱追问的 5 个问题(必背)

1. 为什么要用授权码模式,不能直接用令牌模式?

因为授权码模式token 不返回前端,更安全;前端只拿到 code,无法伪造请求。

2. code 有什么特点?

一次性、临时、短过期、只能后端兑换、防重放。

3. Token 和 JWT 是什么关系?

Token 是一种机制;JWT 是 Token 的一种实现方案。

4. JWT 存在哪里?

LocalStorage / Cookie / Authorization 请求头。

5. 第三方登录的安全关键点?

  • client_secret 必须放后端

  • 使用 state 防 CSRF

  • code 一次性使用

  • token 必须加密传输

  • 所有请求走 HTTPS

八、极简记忆口诀

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

C语言简介

C语言的发展过程 C语言是在70年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。同时由B.W.Kernighan和D.M.Ritchit合著了著名的“THE C PROGRAMMING LANGUAGE”一书。通常简称为《K&R》,也有…

作者头像 李华
网站建设 2026/4/15 1:09:13

Go语言HTTP服务优化:从性能到可靠性

Go语言HTTP服务优化:从性能到可靠性 一、HTTP服务的性能瓶颈 在构建Go语言HTTP服务时,我们经常会遇到各种性能瓶颈,影响服务的响应速度和可靠性。 1. 常见性能瓶颈 网络延迟:网络传输时间、DNS解析等CPU瓶颈:请求处…

作者头像 李华
网站建设 2026/4/15 1:02:12

突破某音新版SSL Pinning:无需Frida的SO层Patch方案

1. 为什么传统方法失效了? 最近不少做逆向分析的朋友都在抱怨,某音新版突然抓不到包了。明明已经配置好了抓包环境,甚至用上了Frida和JustTrustMe这类工具,结果发现这次某音压根没走系统SSL库,而是自己实现了一套校验机…

作者头像 李华
网站建设 2026/4/15 0:55:54

从零到一:解锁Obsidian核心功能与高效工作流

1. 为什么选择Obsidian构建知识体系? 第一次打开Obsidian时,你可能和我当初一样感到困惑——这个看起来朴素的Markdown编辑器,凭什么被称作"第二大脑"?经过两年深度使用,我的个人知识库已经积累了超过2000条…

作者头像 李华