OAUTH开放授权
OAUTH开放授权
OAUTH
开放授权为用户资源的授权提供了一个安全的、开放而又简易的标准。OAUTH
的授权不会使第三方触及到用户的帐号信息例如用户名与密码等,即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH
授权是安全的,目前OAUTH
的版本为2.0
。
实例
假如此时有一个网站提供照片的冲印服务并且提供邮递服务,但是用户的所有照片都存储在Google
网盘中,此用户如果想冲印大量照片,那么有以下几种解决方案:
- 登录用户自己的
Google
账号,将所有需要打印的照片下载到本地,然后上传照片到云冲印网站,交予网站任务让其帮你冲印。这种解决方案是可行的,但是需要将照片下载后再上传,比较麻烦。 - 将自己的
Google
账号密码告知冲印网站,然后冲印网站读取照片,此后用户选择读取的照片再交予网站进行打印服务。这种解决方案非常不可靠,冲印网站此时能够接触到用户的账号与密码,不排除其在后端服务器保存账号密码的可能。冲印网站只是需要读取照片数据,而此时冲印网站有了跟用户一样的权力,对于Google
账号中保存的数据全部可以获取到,扩大了冲印网站的权力。假如所有的需要Google
授权的网站都是以告知账号密码的形式进行授权,用户若想收回对于这个网站的授权,只能通过修改密码的方式,而此时所有的对于其他网站的授权将全部失效。若是授权网站以明文的形式记录了用户授权的网站的账号与密码,一旦数据库被攻陷,那么用户信息就将全部泄露。此外不排除网站进行钓鱼欺骗用户账号密码的嫌疑,实际上通过赠送物品而骗取用户账号密码是钓鱼网站常用的手段。 - 使用
OAUTH
开放授权,通过用户授权照片冲印网站能够获得的数据范围,而对于其他的数据则不给予其访问权限,用户的授权行为全部在Google
的授权网站中进行,即使用户在授权时未登录Google
需要账号密码登录时也是在Google
官方网站进行,冲印网站无法得到用户账号与密码,当用户在Google
授权页面将读取照片的权限给予冲印网站后,冲印网站便可读取照片信息然后进行冲印服务。简单来说OAuth
就是一种授权机制,数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据,系统从而产生一个短期的进入令牌token
,用来代替密码,供第三方应用获取资源使用。
授权过程
名词定义
Third-party application
:第三方应用程序,例如上文中的云冲印网站。HTTP service
: 服务提供商,例如上文中的Google
。User Agent
: 用户代理,一般都是使用浏览器。Authorization server
: 认证服务器,服务提供商用来处理认证的服务器。Resource server
: 资源服务器,即服务提供商存放用户资源的服务器。
基本流程
- 用户打开应用程序,应用程序要求用户给予授权。
- 用户在服务提供商网站允许授权,返回应用程序授权信息。
- 应用程序使用获得的授权,向认证服务器请求令牌
Token
。 - 认证服务器对于应用程序的授权码等信息进行确认,认证无误后发放令牌。
- 应用程序使用令牌向资源服务器请求资源。
- 资源服务器确认令牌无误后,同意向应用程序开放资源。
客户端授权模式
在基本流程的第二步应用程序需要获取用户的授权信息,进而才能获取令牌,OAuth 2.0
定义了四种授权方式。
授权码模式
授权码模式authorization code
是功能最完整、流程最严密的授权模式,也是最常用的授权模式,它的特点就是通过客户端的后台服务器与服务提供商的认证服务器进行互动,避免了令牌Token
在前端传输,前端只传递一个授权码,而授权码需要结合Appid
与AppSecret
等信息在后端与认证服务器交换令牌Token
,而AppSecret
此类数据需要严格保密,所以仅由CODE
不能直接获取到令牌,授权码模式安全性非常高。
- 用户打开应用程序,点击第三方授权按钮,此时需要传递应用程序的
APPID
以及授权后跳转的URL
地址,页面跳转到授权网站,或者打开一个新的窗口到授权网站,本例主要是以跳转到授权网站为例,但基本流程相同。 - 用户在授权网站点击授权按钮,此时浏览器跳转到上一部传递的
URL
地址并且携带授权码CODE
信息,这个授权码信息一般有效期比较短,一般为10
分钟。 - 应用程序收到授权码,将授权码
CODE
发送到后端,后端根据授权码CODE
以及Appid
与AppSecret
等信息在后端对认证服务器发起请求。 - 认证服务器检查请求的数据是否正确,检查正确后返回令牌
Token
。 - 应用程序使用令牌向资源服务器请求资源,资源服务器确认令牌无误后,同意向应用程序开放资源。
简化模式
简化模式implicit grant type
不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了授权码这个步骤。所有步骤在浏览器中完成,令牌对访问者是可见的,且客户端不需要认证。
- 用户打开应用程序,点击第三方授权按钮,此时需要传递应用程序的
APPID
以及授权后跳转的URL
地址,页面跳转到授权网站,或者打开一个新的窗口到授权网站,本例主要是以跳转到授权网站为例,但基本流程相同。 - 用户在授权网站点击授权按钮,此时浏览器跳转到上一部传递的
URL
地址并且携带一个HASH
信息,其中包含了令牌。 - 浏览器向资源服务器发起请求,此时不携带上一步请求的
HASH
信息,资源服务器返回一个解析脚本。 - 浏览器解析上一步获取的脚本,然后通过脚本解析出
HASH
中的令牌,此时应用程序获取了令牌。 - 应用程序使用令牌向资源服务器请求资源,资源服务器确认令牌无误后,同意向应用程序开放资源。
密码模式
密码模式Resource Owner Password Credentials Grant
中,用户向客户端提供自己的用户名和密码,客户端使用这些信息,向服务商提供商索要授权。在这种模式中,用户必须把自己的密码给客户端,但是客户端不得储存密码,这通常用在用户对客户端高度信任的情况下,比如客户端是操作系统的一部分,而认证服务器只有在其他授权模式无法执行的情况下,才能考虑使用这种模式。
- 用户向应用程序提供用户名与密码,应用程序使用账号与密码发给认证服务器,请求令牌。
- 认证服务器确认信息无误后,返回令牌给应用程序。
- 应用程序使用令牌向资源服务器请求资源,资源服务器确认令牌无误后,同意向应用程序开放资源。
客户端模式
客户端模式Client Credentials Grant
指客户端以自己的名义,而不是以用户的名义,向服务提供商进行认证。在这种模式中,用户直接向客户端注册,客户端以自己的名义要求服务提供商提供服务,严格来说这种模式其实并不存在授权问题。
- 用户在应用程序中注册身份,应用程序向认证服务器进行身份认证并请求令牌。
- 认证服务器确认身份无误后,返回令牌给应用程序。
- 应用程序使用令牌向资源服务器请求资源,资源服务器确认令牌无误后,同意向应用程序开放资源。
每日一题
https://github.com/WindrunnerMax/EveryDay
参考
https://zhuanlan.zhihu.com/p/138424479
http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
http://www.ruanyifeng.com/blog/2019/04/oauth_design.html
OAUTH开放授权的更多相关文章
- OAuth 开放授权
什么是OAuth授权? 一.什么是OAuth协议 OAuth(开放授权)是一个开放标准. 允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息. 而这种授权无需将用户提供用户名和密 ...
- 第三方登录(1)OAuth(开放授权)简介及授权过程
3个角色:服务方,开发者,用户 a.用户在第在服务注册填写个人信息, b.服务方开放OAuth, c.开发者在服务方申请第3方登录,在程序中得到令牌后,经用户同意,可得到用户的个人信息. OAuth ...
- OAuth 开放授权 Open Authorization
http://oauth.net/ http://tools.ietf.org/html/rfc6749 http://reg.163.com/help/help_oauth2.html 网易通行证O ...
- OAuth机制原理(开放授权机制)
1.简述 OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全.开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息,并且这是安全的. 国 ...
- OAuth(开放授权)
HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RESTful API 使 ...
- 安全系列之二:OAuth2.0 开放授权协议
本文提取出OAuth2.0规范RFC6749的主要内容,部分内容从文档复制出来,给大家讲讲第三方授权背后的故事. 先是举个知乎的QQ登录授权的例子,然后讲四种授权方式,两种令牌,接着是看看协议流程,分 ...
- OAuth2:隐式授权(Implicit Grant)类型的开放授权
适用范围 仅需临时访问的场景 用户会定期在API提供者那里进行登录 OAuth客户端运行在浏览器中(Javascript.Flash等) 浏览器绝对可信,因为该类型可能会将访问令牌泄露给恶意用户或应用 ...
- OAuth2:客户端证书授权(Client Credentials)类型的开放授权
适应范围 认证服务器不提供像用户数据这样的重要资源,仅仅是有限的只读资源或者一些开放的API.例如使用了第三方的静态文件服务,如Google Storage或Amazon S3.这样,你的应用需要通过 ...
- 在WebApi中基于Owin OAuth使用授权发放Token
如何基于Microsoft.Owin.Security.OAuth,使用Client Credentials Grant授权方式给客户端发放access token? Client Credentia ...
随机推荐
- (附音视频、PPT地址)《打开Python这扇窗》分享总结
0.导读 2016年最新开发语言排行榜中,Python已经跃居第三,仅次于C.JAVA.掌握Python已经成为时下运维圈的共识,更让人期待的是,本次公开课分享的嘉宾自身就长期专注Python.Doc ...
- nodeJS中express框架设置全局跨域请求头
//设置跨域请求头 router.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin&qu ...
- 从入门到精通(分布式文件系统架构)-FastDFS,FastDFS-Nginx整合,合并存储,存储缩略图,图片压缩,Java客户端
导读 互联网环境中的文件如何存储? 不能存本地应用服务器 NFS(采用mount挂载) HDFS(适合大文件) FastDFS(强力推荐
- js递归实现方式
定义: 递归函数就是在函数体内调用本函数: 递归函数的使用要注意函数终止条件避免死循环: 递归实现形式: 1.声明一个具名函数,通过函数名调用 function f(a){ if(a<=1){ ...
- G - Queue HDU - 5493 线段树+二分
G - Queue HDU - 5493 题目大意:给你n个人的身高和这个人前面或者后面有多少个比他高的人,让你还原这个序列,按字典序输出. 题解: 首先按高度排序. 设每个人在其前面有k个人,设比这 ...
- FOC中电流环调试的宝贵经验总结(有理有据+全盘拖出)
你是否经历过一个人独自摸索前进磕磕碰碰最终体无完肤,然后将胜利的旗帜插到山顶的时刻,如果有,本文也许能帮你在调试FOC电流环的时候给你带来一些帮助和思路. 如果本文帮到了您,请帮忙点个赞
- Python哈希表和解析式
目录 1. 封装和解构 1.1 封装 1.2 解构 2. 集合Set 2.1 初始化 2.2 增加 2.3 删除 2.4 遍历 2.5 并集&交集&差集&对称差集 3.字典 3 ...
- js前端获取当前日期,日期格式为yyyy-mm-dd HH:MM
var date = new Date(); var year = date.getFullYear(); var month = date.getMonth()+1; var day = date. ...
- Mybatis 快速入门(XML方式)第一天
导读 架构原理图 说明 mybatis配置文件 SqlMapConfig.xml,此文件为mybatis的全局配置文件,配置了mybatis的运行环境等信息 XXXMapper.xml,此文件作为my ...
- 800+Java后端经典面试题,希望你找到自己理想的Offer呀~
前言 在茫茫的互联网海洋中寻寻觅觅,我收藏了800+道Java经典面试题,分享给你们.建议大家收藏起来,在茶余饭后拿出来读一读,以备未雨绸缪之需.另外,面试题答案的话,我打算后面慢慢完善在github ...