Java高频面试题,谈谈你对OAuth的理解,这道题你会了吗?

简介: 1位工作5年的小伙伴被问到这样一道面试题,说谈谈你对OAuth的理解。当时,这位小伙伴感觉回答得不是很理想,希望我拍一期视频详细地介绍一下。今天,我给大家讲一讲,我对这个问题的理解。

1位工作5年的小伙伴被问到这样一道面试题,说谈谈你对OAuth的理解。当时,这位小伙伴感觉回答得不是很理想,希望我拍一期视频详细地介绍一下。


今天,我给大家讲一讲,我对这个问题的理解。

1、什么是 OAuth

OAuth是一个关于授权(Authorization)的开放技术标准,在全世界得到广泛应用,它本质上是一种协议,可以在不共享用户用户名和密码的前提下,实现将授权从应用程序另一个应用程序。如图所示:

c12211aebdf3eb283b3262635ae8e680.jpg

咱们可以使用QQ或者微信直接登录京东APP,而无需在京东重新注册用户。相当于,用户可以在一个平台上登录,获得授权后,也可在另一平台上执行操作和查看数据。使用最为广泛的场景是SSO(单点登录)。

0ab684be94b24fe28d68a4a6e263e6cb.png

举个例子,有一位访客需要在房主不在家时进到房间里面,房主又不能把门锁密码告诉访客,而是给预先发给访客一张临时房卡,这张房卡刷一次就失效了。OAuth 的工作方式和这个场景非常类似,一个应用程序向另一个应用发送授权令牌来授予用户访问权限,而不是发送用户的密码。

2、OAuth的工作原理

我们知道,任何的身份认证,本质上都是基于对请求方的不信任产生的。而OAuth的出现,主要是解决多个应用之间的授权信任问题。在OAuth的交互过程中有四个参与角色,如图所示:

69606b8916d979dcc4458baddedd4ff0.jpg

它们分别是:


1、资源所有者(Resource Owner):一般是指咱们自己


2、客户端(Client):一般是指需要授权的应用,比如京东APP


3、资源服务器(Resource Server):一般是指保存信息的服务器,比如QQ密码和微信密码的服务器。


4、授权服务器(Authorization Server):一般是指提API的服务器,比如QQ的Open API服务,微信的Open API服务。


一般情况下,资源服务器和认证服务器是同一个服务,这样更方便调用。OAuth的工作原理如图所示:

a4c63fe9a610c5cc5a625980a0dc8fc9.jpg

首先,第1步,客户端向资源拥有者发送授权请求,一般资源拥有者的资源会存放在资源服务器。


第2步,客户端会收到资源服务器的授权许可,


第3步:客户端拿到许可之后,再向授权服务器发送一次验证,给客户端颁发一个Access Token访问令牌。


第4步:客户端拿到令牌之后,交给资源服务器。


第5步:资源服务器会将获取到的令牌传给认证服务器验证令牌的有效性。


第6步:资源服务器验证令牌通过之后,就会返回一个受保护的资源。


在我们看到的这个流程中,最重要的是第2步,也就是在第3步获取授权之前,客户端要先申请许可资源的内容,比如用户头像,用户昵称等等。也就是客户端向资源服务器申请授权的时候,需要填写以下授权所需的信息,分别是:应用名称、应用网站、重定向URI或者回调的URL(redirect_uri)、客户端标识client_id和客户端密钥client_secret。这些信息需要我们在 。


当然,OAuth一共设计了四种授权模式,分别是:


授权码模式(Authorization Code Grant)、

6b5222e777accd5c60aeb00297215444.jpg

简化模式(Implicit Grant)、

189f98360e912ddeec53c520ee615fb8.jpg

密码模式(Resource Owner Password Credentials Grant)、

c203dbbc47620e204069d8f813470014.jpg

客户端模式(Client Credentials Grant),

325bc804e3a0c6db1bcabc705557e511.jpg

由于视频时长的限制,我这里就不详细介绍了。有兴趣的小伙伴可以在评论区回复666,我可以单独再拍摄一期视频专门讲解。

3、关于OAuth 2.0

900a7837b08f0705929438cdbfd0131a.jpg

OAuth 2.0 是 OAuth 的最新版本。OAuth 的首版于 2010 年发布。OAuth 2.0 于 2012 年发布,修复了 OAuth 1.0 中存在的若干漏洞。目前,大家基本上都只会使用OAuth2.0了。


好了,以上就是我对OAuth的理解。


我是被编程耽误的文艺Tom,如果我的分享对你有帮助,请动动手指分享给更多的人。关注我,面试不再难!


我是被编程耽误的文艺Tom,关注我,面试不再难!


完整版面试资料和答案以及PDF文档 :

9106b97c16b34d06af118b23d081cde9.gif

相关文章
|
3月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
6月前
|
缓存 Java 关系型数据库
2025 年最新华为 Java 面试题及答案,全方位打造面试宝典
Java面试高频考点与实践指南(150字摘要) 本文系统梳理了Java面试核心考点,包括Java基础(数据类型、面向对象特性、常用类使用)、并发编程(线程机制、锁原理、并发容器)、JVM(内存模型、GC算法、类加载机制)、Spring框架(IoC/AOP、Bean生命周期、事务管理)、数据库(MySQL引擎、事务隔离、索引优化)及分布式(CAP理论、ID生成、Redis缓存)。同时提供华为级实战代码,涵盖Spring Cloud Alibaba微服务、Sentinel限流、Seata分布式事务,以及完整的D
363 1
|
6月前
|
存储 安全 Java
常见 JAVA 集合面试题整理 自用版持续更新
这是一份详尽的Java集合面试题总结,涵盖ArrayList与LinkedList、HashMap与HashTable、HashSet与TreeSet的区别,以及ConcurrentHashMap的实现原理。内容从底层数据结构、性能特点到应用场景逐一剖析,并提供代码示例便于理解。此外,还介绍了如何遍历HashMap和HashTable。无论是初学者还是进阶开发者,都能从中受益。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
303 3
|
5月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
477 0
|
5月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
253 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
3月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
6月前
|
存储 安全 Java
2025 最新史上最全 Java 面试题独家整理带详细答案及解析
本文从Java基础、面向对象、多线程与并发等方面详细解析常见面试题及答案,并结合实际应用帮助理解。内容涵盖基本数据类型、自动装箱拆箱、String类区别,面向对象三大特性(封装、继承、多态),线程创建与安全问题解决方法,以及集合框架如ArrayList与LinkedList的对比和HashMap工作原理。适合准备面试或深入学习Java的开发者参考。附代码获取链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
3380 48
|
6月前
|
算法 架构师 Java
Java 开发岗及 java 架构师百度校招历年经典面试题汇总
以下是百度校招Java岗位面试题精选摘要(150字): Java开发岗重点关注集合类、并发和系统设计。HashMap线程安全可通过Collections.synchronizedMap()或ConcurrentHashMap实现,后者采用分段锁提升并发性能。负载均衡算法包括轮询、加权轮询和最少连接数,一致性哈希可均匀分布请求。Redis持久化有RDB(快照恢复快)和AOF(日志更安全)两种方式。架构师岗涉及JMM内存模型、happens-before原则和无锁数据结构(基于CAS)。
180 5
|
6月前
|
Java API 微服务
2025 年 Java 校招面试全攻略:从面试心得看 Java 岗位求职技巧
《2025年Java校招最新技术要点与实操指南》 本文梳理了2025年Java校招的核心技术栈,并提供了可直接运行的代码实例。重点技术包括: Java 17+新特性(Record类、Sealed类等) Spring Boot 3+WebFlux响应式编程 微服务架构与Spring Cloud组件 Docker容器化部署 Redis缓存集成 OpenAI API调用 通过实际代码演示了如何应用这些技术,如Java 17的Record类简化POJO、WebFlux构建响应式API、Docker容器化部署。
290 5