【OAuth2】:赋予用户控制权的安全通行证--原理篇

🥳🥳Welcome Huihui’s Code World ! !🥳🥳

接下来看看由辉辉所写的关于OAuth2的相关操作吧

目录

🥳🥳Welcome Huihui’s Code World ! !🥳🥳

一.什么是OAuth?

二.为什么要用OAuth?

三. OAuth2的四种授权模式

1. 隐式授权模式(Implicit Grant)

2. 授权码授权模式(Authorization code Grant)

3. 密码模式(Resource Owner Password Credentials Grant)

4. 客户端凭证模式(Client Credentials Grant)

四.关于授权码授权模式的详细讲解

1.流程说明

2.模拟过程

3.实例说明


一.什么是OAuth?

OAuth 不是一个API或者服务,而是一个验证授权(Authorization)的开放标准,所有人都有基于这个标准实现自己的OAuth。

更具体来说,OAuth是一个标准,app可以用来实现secure delegated access.
OAuth基于HTTPS,以及APIs,Service应用使用access token来进行身份验证。

OAuth主要有OAuth 1.0a和OAuth 2.0两个版本,并且二者完全不同,且不兼容。OAuth2.0
是目前广泛使用的版本,我们多数谈论OAuth时,为OAuth2.0

二.为什么要用OAuth?

在OAuth之前,HTTP Basic Authentication, 即用户输入用户名,密码的形式进行验证,
这种形式是不安全的。OAuth的出现就是为了解决访问资源的安全性以及灵活性。OAuth使得第三方应用对资源的访问更加安全。

可能这样讲,大家会觉得不生动,那么我接下来举一个生活中的例子让大家能够更快的去理解要使用oauth的原因

假设我住在一个大型的居民小区。![](https://img-
blog.csdnimg.cn/direct/f0722a8b5faa4b6e8b3901d4c26caa6a.png)

小区有门禁系统。![](https://img-
blog.csdnimg.cn/direct/d2e37b7f73b141939f9aaad10757761b.png)

进入的时候需要输入密码,或者扫码。![](https://img-
blog.csdnimg.cn/direct/54524587cbe04537900a2f4aa7ed5912.png)

我经常网购和外卖,每天都有快递员来送货。我必须找到一个办法,让快递员通过门禁系统,进入小区。![](https://img-
blog.csdnimg.cn/direct/49ea77bdd98a4608af0bcd858d0c6f2c.png)

如果我把自己的密码,告诉快递员,他就拥有了与我同样的权限,这样好像不太合适。万一我想取消他进入小区的权力,也很麻烦,我自己的密码也得跟着改了,还得通知其他的快递员。

有没有一种办法,让快递员能够自由进入小区,又不必知道小区居民的密码,而且他的唯一权限就是送货,其他需要密码的场合,他都没有权限?

于是,我设计了一套授权机制。

第一步,门禁系统的密码输入器下面,增加一个按钮,叫做"获取授权"。快递员需要首先按这个按钮,去申请授权。

第二步,他按下按钮以后,屋主(也就是我)的手机就会跳出对话框:有人正在要求授权。系统还会显示该快递员的姓名、工号和所属的快递公司。

我确认请求属实,就点击按钮,告诉门禁系统,我同意给予他进入小区的授权。

第三步,门禁系统得到我的确认以后,向快递员显示一个进入小区的令牌(access token)。令牌就是类似密码的一串数字,只在短期内(比如七天)有效。

第四步,快递员向门禁系统输入令牌,进入小区。

有人可能会问,为什么不是远程为快递员开门,而要为他单独生成一个令牌?这是因为快递员可能每天都会来送货,第二天他还可以复用这个令牌。另外,有的小区有多重门禁,快递员可以使用同一个令牌通过它们。【大概的步骤就是下方图片所示】

综上,可知 OAuth
就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。

三. OAuth2的四种授权模式

1. 隐式授权模式(Implicit Grant)

![](https://img-
blog.csdnimg.cn/img_convert/cbb79e994fac2796615faafb353b8917.png)

  • 第一步:用户访问页面时,重定向到认证服务器。
  • 第二步:认证服务器给用户一个认证页面,等待用户授权。
  • 第三步:用户授权,认证服务器想应用页面返回Token
  • 第四步:验证Token,访问真正的资源页面

![](https://img-
blog.csdnimg.cn/img_convert/6fe7a4273e14b56fee900c20d8a83f72.png)

2. 授权码授权模式(Authorization code Grant)

![](https://img-
blog.csdnimg.cn/img_convert/1752f43434d5bb13ef6b41ae05f5e45f.png)

  • 第一步:用户访问页面
  • 第二步:访问的页面将请求重定向到认证服务器
  • 第三步:认证服务器向用户展示授权页面,等待用户授权
  • 第四步:用户授权,认证服务器生成一个code和带上client_id发送给应用服务器
    • 然后,应用服务器拿到code,并用client_id去后台查询对应的client_secret
  • 第五步:将code、client_id、client_secret传给认证服务器换取access_token 和 refresh_token
  • 第六步:将access_token和refresh_token传给应用服务器
  • 第七步:验证token,访问真正的资源页面

![](https://img-
blog.csdnimg.cn/img_convert/fb5dc28af08e8892c8d3aba97a9061b3.png)

3. 密码模式(Resource Owner Password Credentials Grant)

![](https://img-
blog.csdnimg.cn/img_convert/9daadb75daa6f1748d86d455d8927488.png)

  • 第一步:用户访问用页面时,输入第三方认证所需要的信息(QQ/微信账号密码)
  • 第二步:应用页面那种这个信息去认证服务器授权
  • 第三步:认证服务器授权通过,拿到token,访问真正的资源页面

优点:不需要多次请求转发,额外开销,同时可以获取更多的用户信息。(都拿到账号密码了)

缺点:局限性,认证服务器和应用方必须有超高的信赖。(比如亲兄弟?)

应用场景:自家公司搭建的认证服务器

4. 客户端凭证模式(Client Credentials Grant)

![](https://img-
blog.csdnimg.cn/img_convert/0c2d4a4422788275454c0869c4a8f73f.png)

  • 第一步:用户访问应用客户端
  • 第二步:通过客户端定义的验证方法,拿到token,无需授权
  • 第三步:访问资源服务器A
  • 第四步:拿到一次token就可以畅通无阻的访问其他的资源页面。

这是一种最简单的模式,只要client请求,我们就将AccessToken发送给它。这种模式是最方便但最不安全的模式。因此这就要求我们对client完全的信任,而client本身也是安全的。

因此这种模式一般用来提供给我们完全信任的服务器端服务。在这个过程中不需要用户的参与

四.关于授权码授权模式的详细讲解

我们在实战中,用的最多的就是授权码的授权模式,这个模式相对来说用的比较多,所以我们再详细的讲解一下他的流程

1.流程说明

1、用户访问客户端
2、客户端将用户导向认证服务器
3、用户登录,并对第三方客户端进行授权
4、认证服务器将用户导向客户端事先指定的重定向地址,并附上一个授权码
5、客户端使用授权码,向认证服务器换取令牌
6、认证服务器对客户端进行认证以后,发放令牌
7、客户端使用令牌,向资源服务器申请获取资源
8、资源服务器确认令牌,向客户端开放资源

2.模拟过程

  • 流程说明

    • 资源拥有者打开客户端,客户端要求资源拥有者给予授权,它将浏览器被重定向到授权服务器,重定向时会附加客户端的身份信息。如:
/server/oauth2/authorize?

client_id=test&response_type=code&scope=app&redirect_uri=http://xx.xx/notify

client_id: 客户端接入标识。

response_type: 授权码模式固定为code。

scope: 客户端权限。

redirect_uri:
跳转uri,当授权码申请成功后会跳转到此地址,并在后边带上code参数(授权码)。例如:xx.xx/notify?code…

  • 浏览器出现向授权服务器授权页面,之后将用户同意授权。

  • 授权服务器将授权码(AuthorizationCode)转经浏览器发送给client(通过redirect_uri传递,url后面拼接参数)。

  • 客户端拿着授权码向授权服务器索要访问access_token,请求如下:

    /server/oauth2/token?
    

client_id=test&client_secret=gdjbcd&grant_type=authorization_code&code=qwe12&redirect_uri=http://xx.xx/notify

client_id:客户端准入标识。

client_secret:客户端秘钥。

grant_type:授权类型,填写authorization_code,表示授权码模式
code:授权码,就是刚刚获取的授权码,注意:授权码只使用一次就无效了,需要重新申请。

redirect_uri:申请授权码时的跳转url,一定和申请授权码时用的redirect_uri一致

  • 授权服务器返回令牌(access_token)

这种模式是四种模式中最安全的一种模式。一般用于Web服务器端应用或第三方的原生App调用资源服务的时候。
因为在这种模式中access_token不会经过浏览器或移动端的App,而是直接从服务端去交换,这样就最大限度的减 小了令牌泄漏的风险

3.实例说明

![](https://img-
blog.csdnimg.cn/direct/73bc7273f7c9436a8f49b4271830961e.png)![](https://img-
blog.csdnimg.cn/direct/ad053ce959554809b15aed6b7efb446d.png)![](https://img-
blog.csdnimg.cn/direct/ff63bdc52de84e0596569dbb4991aa8e.png)![](https://img-
blog.csdnimg.cn/direct/cc79fa5d318948f0a44ab1daa615a92a.png)

后续的几个步骤都是在后端完成的,我们在前端无法演示了

好啦,今天的分享就到这了,希望能够帮到你呢!😊😊

接下来我将给各位同学划分一张学习计划表!

学习计划

那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:

阶段一:初级网络安全工程师

接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。

综合薪资区间6k~15k

1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?

阶段二:中级or高级网络安全工程师(看自己能力)

综合薪资区间15k~30k

7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。

零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;

Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完

用Python编写漏洞的exp,然后写一个简单的网络爬虫

PHP基本语法学习并书写一个简单的博客系统

熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)

了解Bootstrap的布局或者CSS。

阶段三:顶级网络安全工程师

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

学习资料分享

当然,只给予计划不给予学习资料的行为无异于耍流氓,这里给大家整理了一份【282G】的网络安全工程师从入门到精通的学习资料包,可点击下方二维码链接领取哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值