前言

最经要定义一些接口于是接触到了OAuth2.0这样的第三方接口机制,所以就简单的了解下,把学习感想发在这里以便以后参考回顾

了解 OAuth2.0

其实网上有一篇大神阮一峰写的博文已近写的很好了,在这里直接就引用他的博文来讲。

OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。

为了理解OAuth的适用场合,让我举一个假设的例子。

有一个”云冲印”的网站,可以将用户储存在Google的照片,冲印出来。用户为了使用该服务,必须让”云冲印”读取自己储存在Google上的照片。
云冲印 问题是只有得到用户的授权,Google才会同意”云冲印”读取这些照片。那么,”云冲印”怎样获得用户的授权呢?
传统方法是,用户将自己的Google用户名和密码,告诉”云冲印”,后者就可以读取用户的照片了。这样的做法有以下几个严重的缺点。
(1)”云冲印”为了后续的服务,会保存用户的密码,这样很不安全。
(2)Google不得不部署密码登录,而我们知道,单纯的密码登录并不安全。
(3)”云冲印”拥有了获取用户储存在Google所有资料的权力,用户没法限制”云冲印”获得授权的范围和有效期。
(4)用户只有修改密码,才能收回赋予”云冲印”的权力。但是这样做,会使得其他所有获得用户授权的第三方应用程序全部失效。
(5)只要有一个第三方应用程序被破解,就会导致用户密码泄漏,以及所有被密码保护的数据泄漏。 OAuth就是为了解决上面这些问题而诞生的。

在详细讲解OAuth 2.0之前,需要了解几个专用名词。它们对读懂后面的讲解,尤其是几张图,至关重要。

(1) Third-party application:第三方应用程序,本文中又称”客户端”(client),即上一节例子中的”云冲印”。
(2)HTTP service:HTTP服务提供商,本文中简称”服务提供商”,即上一节例子中的Google。
(3)Resource Owner:资源所有者,本文中又称”用户”(user)。
(4)User Agent:用户代理,本文中就是指浏览器。
(5)Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。
(6)Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。

总体来说:OAuth 就是在”客户端”与”服务提供商”之间,设置了一个授权层(authorization layer)。”客户端”不能直接登录”服务提供商”,只能登录授权层,以此将用户与客户端区分开来。这样一来互相都保证了独立性以及信息的安全性。

那么用OAuth来封装接口的意义就是:接口使用方可以安全可靠的拿到你服务器的资源,但不至于拿到你过多的资源,保护了自己的信息安全也保证了接口的可靠和正规性

OAuth 2.0的运行流程如下图,摘自阮一峰大神博文

(A)用户打开客户端以后,客户端要求用户给予授权。
(B)用户同意给予客户端授权。
(C)客户端使用上一步获得的授权,向认证服务器申请令牌。
(D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
(E)客户端使用令牌,向资源服务器申请获取资源。
(F)资源服务器确认令牌无误,同意向客户端开放资源。

不难看出来,上面六个步骤之中,B是关键,即用户怎样才能给于客户端授权。有了这个授权以后,客户端就可以获取令牌,进而凭令牌获取资源。而授权我们又拥有几种授权的模式。

  1. 授权码模式(authorization code)
  2. 简化模式(implicit)
  3. 密码模式(resource owner password credentials)
  4. 客户端模式(client credentials)

    这里我们只将第一种也是最全面的模式

授权码模式


授权码模式(authorization code)是功能最完整、流程最严密的授权模式。它的特点就是通过客户端的后台服务器,与”服务提供商”的认证服务器进行互动。

OAuth 2.0的授权码模式运行流程如下图,摘自阮一峰大神博文

(A)用户访问客户端,后者将前者导向认证服务器。 (B)用户选择是否给予客户端授权。
(C)假设用户给予授权,认证服务器将用户导向客户端事先指定的”重定向URI”(redirection URI),同时附上一个授权码。
(D)客户端收到授权码,附上早先的”重定向URI”,向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。
(E)认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh
token)。

这就是授权码模式的基本原理,那么如何结合PHP呢?下一篇开始学习

【学无止境】基于ThinkPHP的OAuth2.0实现 ------ OAuth2.0个人学习笔记 One相关推荐

  1. ASP.NET Core分布式项目实战(oauth2 + oidc 实现 client部分)--学习笔记

    任务16:oauth2 + oidc 实现 client部分 实现 client 之前启动一下上一节的 server,启动之前需要清除一些代码 注释 Program 的 MigrateDbContex ...

  2. ASP.NET Core分布式项目实战(oauth2 + oidc 实现 server部分)--学习笔记

    任务15:oauth2 + oidc 实现 server部分 基于之前快速入门的项目(MvcCookieAuthSample): ASP.NET Core快速入门(第5章:认证与授权)--学习笔记 A ...

  3. Echarts3.0入门基础与实战(学习笔记)

    1.浏览器画图原理简介 2.Echarts库简介 3.Echarts简单使用 4.Echarts组件使用 5.Echarts高级图例介绍 6.扩展知识 1.浏览器画图原理简介 canvas 基于像素, ...

  4. 阿里云天池 Python训练营Task4: Python数据分析:从0完成一个数据分析实战 学习笔记

    本学习笔记为阿里云天池龙珠计划Python训练营的学习内容,学习链接为:https://tianchi.aliyun.com/specials/promotion/aicamppython?spm=5 ...

  5. 基于百度英伟达EasyDL公开课的学习笔记

    本文是基于智东西公开课<零算法基础的百度EasyDL定制化图像识别揭秘>整理的学习笔记 本文非广告,标注单纯是出于尊重智东西和EasyDL的知识产权 如若涉及侵权,请联系本人 作者:李皮皮 ...

  6. 基于C#的中望CAD二次开发学习笔记(1)环境测试

    目录 前言 一.ZRXSDK的安装使用 二.创建项目 三.编写环境测试代码 四.在ZWCAD中测试 参考资料 总结 前言 作为一个设计院搬砖人,和各种CAD打交道是必不可少的.当然,其中最为正统的是A ...

  7. 引用:基于C#的中望CAD二次开发学习笔记

    目录 前言 一.ZRXSDK的安装使用 二.创建项目 三.编写环境测试代码 四.在ZWCAD中测试 参考资料 总结 前言 作为一个设计院搬砖人,和各种CAD打交道是必不可少的.当然,其中最为正统的是A ...

  8. ASP.NET Core基于K8S的微服务电商案例实践--学习笔记

    摘要 一个完整的电商项目微服务的实践过程,从选型.业务设计.架构设计到开发过程管理.以及上线运维的完整过程总结与剖析. 讲师介绍 产品需求介绍 纯线上商城 线上线下一体化 跨行业 跨商业模式 从0开始 ...

  9. 基于《狂神说Java》JUC并发编程--学习笔记

    前言: 本笔记仅做学习与复习使用,不存在刻意抄袭. -------------------------------------------------------------------------- ...

  10. java基于聚类的离群点检测_挑子学习笔记:基于两步聚类的离群点检测

    转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/anomaly_detection.html 本文主要针对IBM SPSS Modeler 18.0中离群点检 ...

最新文章

  1. python生成50个随机数_Python:如何生成12位随机数?
  2. linux cenots 查看cpu核数
  3. python 四边形分割
  4. NTU课程:MAS714(4):贪心
  5. 参加金蝶OperaMasks-WebFramework成都推广活动后的感想
  6. Asp-Net-Core开发笔记:在docker部署时遇到一个小坑
  7. jquery select change事件_jQuery实现省市联动效果
  8. python围棋程序在屏幕上找棋盘_用C语言编程 在屏幕上显示围棋棋盘
  9. 计算机美国学游戏开发,【工程与计算机】一石二鸟:开发游戏为申美国名校加码...
  10. 马云后悔创办阿里:想停根本停不下来;人民日报评“滴滴顺风车争议”;jQuery 曝漏洞|极客头条...
  11. matlab 运算子图_PHP运算子
  12. [.NET] EF LINQ 按时间对数据分类汇总
  13. 基于vue+js的商城、购物网站 毕业设计 毕设源代码的实现和设计(6)购物车
  14. unity 解决图片无法拖进场景的问题
  15. 微软私有云服务器,微软私有云
  16. 树莓派Pico开发板Arduino IDE开发环境安装与使用
  17. html的音频在线地址,HTML 音频(Audio)
  18. iOS直播(流媒体)基础原理篇
  19. 数据科普:期权的希腊字母 | 上(投资必知必会)
  20. 愿编程不再乱码(含Qt)-根因深究

热门文章

  1. 自定义类模板 重载遇到的问题
  2. Citrix策略处理与优先级
  3. Visual C#使用DirectX实现视频播放
  4. [ASP.NET 控件实作 Day8] 控件常用 Attribute 介绍(1)
  5. css3 text-shadow 为网页字体添加阴影
  6. C++ 多继承和虚继承的内存布局
  7. win7系统, vim的_vimrc文件无法修改
  8. python三十五:pickle模块
  9. DS博客作业07--查找
  10. Webbench的使用