【学无止境】基于ThinkPHP的OAuth2.0实现 ------ OAuth2.0个人学习笔记 One
来源:互联网 发布:周琦cba数据 编辑:程序博客网 时间:2024/06/06 05:59
前言
最经要定义一些接口于是接触到了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是关键,即用户怎样才能给于客户端授权。有了这个授权以后,客户端就可以获取令牌,进而凭令牌获取资源。而授权我们又拥有几种授权的模式。
- 授权码模式(authorization code)
- 简化模式(implicit)
- 密码模式(resource owner password credentials)
客户端模式(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
- 【学无止境】 基于ThinkPHP的OAuth2.0实现 ----OAuth2.0 个人学习笔记 Two
- OAuth2.0 学习笔记
- OAuth2.0学习笔记
- 基于oauth2.0的第三方登录实现
- 【PHP】基于ThinkPHP框架搭建OAuth2.0服务
- 【PHP】基于ThinkPHP框架搭建OAuth2.0服务
- 【PHP】基于ThinkPHP框架搭建OAuth2.0服务
- 一大坨GoogleAPI的学习笔记之三(基于oAuth2.0的domain-wide authentication)
- OAuth2.0实现过程
- OAuth2.0协议学习
- OAuth2.0学习
- 基于OAUTH2.0的授权操作
- 学习 OAuth2.0 笔记( 一 )
- 【OAuth2.0学习笔记一】原理介绍
- 一大坨GoogleAPI的学习笔记之一(oAuth2.0)
- OAuth2.0 的使用
- OAuth2.0 的理解
- eclipse导出项目时报错:problems were encountered during export
- AndroidStudio将变量值显示为十六进制
- linux 安装 apache,php,mysql
- [Python 实战]
- 剑指offer 30. 最小的k个数
- 【学无止境】基于ThinkPHP的OAuth2.0实现 ------ OAuth2.0个人学习笔记 One
- 测试<script>alert(1779)</script>
- javascript中字符串string.replace 第二个参数是函数简单介绍
- springMVC的简单文件上传
- mysql :information_schema
- django+mysql+Apache
- unity3d控制物品的移动(鼠标或上下左右WASD)
- Ionic 2 安装 Ionic start 创建项目报错
- log4j的日志级别