爆破专栏丨Spring Security系列教程之OAuth2(1),2024年最新网络安全高级面试题

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文

需要更多教程,微信扫码即可

👆👆👆

别忘了扫码领资料哦【高清Java学习路线图

【各学科****全套学习视频及配套资料********】

一. OAuth2.0简介

1. OAuth2.0概述

咱们先来看看在RFC6749号文件中对OAuth2.0的定义,如下图所示:

图片

简单来说,OAuth2.0 是一种授权机制,其内部引入了一个授权层,可以分离两种不同的角色:客户端和资源所有者。

资源所有者同意客户端(第三方应用程序)的请求以后,资源服务器就可以向客户端颁发短期的进入令牌(token),用来代替密码,客户端通过这个令牌,去请求有限的资源数据来使用。所以OAuth2.0 的核心就是向第三方应用颁发令牌。

2. OAuth2.0发展历程

**OAuth(Open Authorization)–开放授权,这是一种关于开放授权的协议标准。**所谓的OAuth2.0,表示这是OAuth协议第2版,但并不兼容之前的OAuth1.0协议,即现在已经完全废止了OAuth1.0协议。

那么为什么会废止OAuth1.0协议呢?我们先来简单说一下OAuth协议的发展历程。

2007年12月的时候,OAuth协议已经诞生了,并与2010年4月份,被IETF(国际互联网工程任务组)认可并作为认证授权的标准发布。但是这个OAuth1.0协议有些致命缺陷,就是它的签名逻辑特别复杂,开发时对程序员来说极度恶心。

而且OAuth1.0的授权流程是很单一,存在较大的漏洞,容易被黑客攻击。所以在2012年10月的时候,IETF又更新发布了OAuth2.0协议,在这个版本中,放弃了之前复杂的数字签名和加密方案,使用HTTPS来作为安全保障手段,这降低了程序员的开发难度。但是OAuth2.0协议与OAuth1.0协议互不兼容,所以现在我们进行开发时,都是采用OAuth2.0协议,而不再采用OAuth1.0协议。

3. OAuth2.0功能

通过上一小节,我们了解到OAuth是一种关于开放授权的协议,该协议其实是一个 服务提供商 授权 第三方应用 获取 资源所有者 部分访问权限的授权机制。通俗的说,就是OAuth协议允许用户在不提供密码给第三方应用的情况下,使得第三方应用有权获取用户数据等基本信息。在整个授权过程中,第三方应用都不必获取用户的密码,就可以取得用户部分资源的使用权限,所以OAuth是一种安全开发的协议。

比如我们在CSDN上进行登录时,可以利用CSDN这个平台自身注册的账号,也可以使用第三方账号(QQ、微信、微博等)来进行登录,如下图:

图片

比如我们选择利用QQ账号登录CSDN,如下图:

图片

这时候我们可以打开QQ扫码,或者点击自己的QQ头像,就可以实现利用QQ帐号登录到CSDN这个网站上。在这个过程中,我们其实不必担心自己的QQ密码会泄露给CSDN,因为CSDN是拿不到我们的QQ密码的。

在这个登录过程中,**CSDN相对于QQ来说是第三方应用,QQ就是服务提供商。**在QQ内部,会有一个认证服务器作为专门的授权中心,QQ用户的用户名头像等信息都属于资源,这些资源可能会存放在一台专门的资源服务器上,也可能会直接存放在QQ的认证服务器上。当CSDN经过了QQ的认证之后,就可以获取到QQ上的用户昵称、头像、性别等信息,从而实现利用QQ的用户,登录到CSDN的网站上,免除用户重复的注册过程。

4. OAuth2.0使用场景

根据上一小节,我们可以总结一下OAuth2.0的使用场景,大致如下:

  • **第三方应用登录:**比如利用QQ,微博,微信授权登录到其他网站或App。
  • **分布式或微服务项目中授权:**在Java分布式或微服务开发时,后端业务拆分成若干服务,服务之间或前端进行请求调用时,为了安全认证,可以利用OAuth2.0进行认证授权。

二. OAuth2.0核心概念(重点)

1. 核心概念

另外从上面的章节中,我们也了解到OAuth2.0的几个核心概念,如下:

  • **客户端/第三方应用: 获取用户信息,**如果我们使用QQ账号来登录CSDN网站,这时候CSDN相对于QQ来说就是第三方应用,或者成为是QQ的客户端。
  • **服务提供商:**对外提供请求的服务器,比如上面说的QQ。
  • **Resource Owner:**资源所有(拥有)者,首先我们要明确“资源”的含义,“资源”是指我们请求的各种URL接口及各种数据,这里的资源所有者,也就是登录用户。
  • **Authorization Server:**认证服务器,即服务提供商(比如QQ)专门用来处理认证的服务器。
  • **Resource Server:**资源服务器,即服务提供商存放用户资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。
  • **Access token:**访问令牌,供客户端用来请求Resource Server(API)的资源,Access token通常是short-lived短暂的。

2. 令牌与密码

在OAuth2.0中,提到了一个令牌的概念,那么令牌是什么?与我们平常所用的密码又有什么区别?其实OAuth中的令牌(token)与密码(password)作用是一样的,都可以控制用户是否可以进入系统,但是有几点不同。

  • 令牌是短期的,到期会自动失效,用户自己无法修改;密码一般是长期有效的,用户不修改,就不会发生变化。
  • 令牌可以被资源所有者撤销,会立即失效;密码一般不允许被他人撤销。
  • 令牌有一定的授权范围(scope),密码一般是完整权限。

**注意:**令牌的出现,既可以让第三方应用获得权限,同时又随时可控,不会危及系统安全。但是只要知道了令牌,就能进入系统,系统一般不会再次确认身份,所以令牌必须保密,泄漏令牌与泄漏密码的后果是一样的。这也是为什么令牌的有效期,一般都设置得很短的原因。

三. OAuth2.0授权流程(重点)

了解完OAuth2.0中的各种基本概念之后,我们需要弄清楚OAuth2.0的授权流程,这样后面才能根据这个授权流程进行开发。

1. 授权流程概述

图片

OAuth 2.0的运行流程如下图,摘自RFC 6749。

图片

我们这里以QQ账号登录CSDN网站为例,给大家说一下OAuth2.0的授权执行流程:

(A). 某个用户(资源拥有者)打开CSDN(客户端)网站以后,CSDN(客户端)要求用户(资源拥有者)给予授权;

(B). 如果用户(资源拥有者)同意,就给予CSDN(客户端)授权;

©. CSDN(客户端)使用上一步获得的授权,向QQ的认证授权服务器申请访问令牌Access Token;

(D). QQ的认证授权服务器对CSDN(客户端)进行认证,确认无误后,同意发放访问令牌Access Token;

(E). CSDN(客户端)使用访问令牌,向QQ的资源服务器申请获取某些受保护的资源;

(F). QQ的资源服务器确认访问令牌无误后,同意向CSDN(客户端)开放受保护的资源。

2. 授权流程详解

图片

第一步:在CSDN官网点击选择QQ登录

当我们点击选择QQ登录的图标时,实际是向CSDN服务器发起一个https://graph.qq.com/oauth2.0/show?which=Login&display=pc…&response_ty pe=code&redirect_uri=https…passport.csdn.netogin%3FpcAuth…Type=qq的请求,CSDN服务器会响应一个302重定向地址,指向QQ授权登录。这次访问会携带一个pcAuthCallback,以便QQ那边授权成功后,再次让浏览器发起对这个callback的请求,这样QQ就知道授权后要返回到哪个页面。

第二步:跳转到QQ登录页面输入用户名密码,然后点授权并登录

接着浏览器跳转到重定向地址并访问 http://www.qq.com/authorize?callback=http s://yiyige.blog.cs dn.net/,QQ的服务器接受到了CSDN访问的authorize,并跳转到QQ的登录页面。在用户输入账号密码点击授权并点击登录按钮后,QQ的认证服务器会对用户信息进行认证,若校验成功,该方法会响应浏览器一个重定向地址,并附上一个code(授权码)

图片

第三步:跳回到CSDN页面,登录成功

这一步背后的过程其实是最繁琐的,但对于用户来说是完全感知不到的。

授权QQ服务器在判断登录成功后,使页面重定向到之前CSDN发来的callback地址并附上code授权码,接着会跳转到QQ的认证服务器发起一个新的请求,获取到AccessToken令牌。

获取token成功后,CSDN服务器会用拿到的token换取用户信息,最后将用户信息储存起来,并返回给浏览器其首页的视图,到此OAuth2.0授权结束。

四. OAuth2.0授权方式(重点)

讲解完了OAuth2.0的授权流程,接下来壹哥再给大家介绍另一个重要概念,即OAuth2.0的授权方式。

在RFC 6749标准中定义了获得令牌的四种授权方式(authorization grant),即 OAuth2.0 有四种获得令牌的方式,我们开发时可以选择最适合自己的那一种,向第三方应用颁发令牌,这四种授权方式如下:

  • 授权码模式(authorization code)
  • 简化模式(implicit)
  • 密码模式(resource owner password credentials)
  • 客户端模式(client credentials)

1.授权码模式

授权码模式(authorization code),指的是第三方应用先申请一个授权码,然后再用该授权码获取访问令牌的方式。

这种方式是功能最完整、流程最严密的授权模式,也是开发时最常用,安全性最高的授权模式,适用于那些有后端的 Web 应用,比如我们前面介绍的以QQ信息登录到CSDN网站上就是采用授权码模式。授权码由前端发起申请,令牌则储存在后端,而且所有与资源服务器的通信都在后端完成,这样前后端分离,可以避免令牌泄漏。授权码模式执行流程可以分为如下4步:

图片

接下来我把这4步再分开详细说明一下。

(1). 用户请求客户端A

由客户端A将用户导向认证服务器B请求授权码,假设用户同意授权,认证服务器B会将用户导向客户端A事先指定的"重定向URI"(redirection URI),同时附上一个授权码。

https://b.com/oauth/authorize?
  response_type=code&
  client_id=CLIENT_ID&
  redirect_uri=CALLBACK_URL&
  scope=read

比如我们前面利用QQ进行登录到CSDN网站时,获取code授权码的url:

https://graph.qq.com/oauth2.0/show?which=Login
    &display=pc
    &client_id=100270988899
    &response_type=code
    &redirect_uri=https://passport.csdn.net/account/login?pcAuthType=qq
    &state=test
  • response_type:授权类型,必选项,为固定值code;
  • client_id: 客户端id,必选项,表示告诉 认证服务器B 是谁在发起请求;
  • redirect_uri:可选项,是 认证服务器B 接受或拒绝请求后的回调网址;
  • scope:可选项,表示要求的授权范围(这里是只读);
  • state: 客户端状态。

(2). 客户端A收到授权码code

附上之前的"重定向URI"参数,向认证服务器B申请令牌:GET /oauth/token?response_type=code&client_id=test&redirect_ uri=重定向页面链接,请求成功后返回code授权码,一般有效时间是10分钟。

(3). 客户端A向认证服务器B发起申请令牌的请求

B会核对授权码和重定向URI,确认无误后,向客户端A返回访问令牌(access token)和更新令牌(refresh token),POST/oauth/token?response_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA&redirect_uri=重定向页面链接。

(4). 认证服务器B 收到请求以后

就会颁发令牌,向redirect_uri指定的网址,发送一段 JSON 数据:

2. 简化模式

简化模式(implicit grant type),有些 Web 应用只有前端,没有后端,这时就只能将令牌储存在前端浏览器中。所以在RFC 6749中还规定了第二种授权方式,

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

有些 Web 应用只有前端,没有后端,这时就只能将令牌储存在前端浏览器中。所以在RFC 6749中还规定了第二种授权方式,

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-x8xMOkYT-1713621907390)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值