一、认识 OAuth 2.0
1.1 OAuth 2.0 应用场景
OAuth 2.0 标准目前被广泛应用在第三方登录场景中,以下是虚拟出来的角色,阐述 OAuth2 能帮我们干什么,引用阮一峰这篇理解OAuth 2.0中的例子:
有一个"云冲印"的网站,可以将用户储存在Google的照片,冲印出来。用户为了使用该服务,必须让"云冲印"读取自己储存在Google上的照片。
问题是只有得到用户的授权,Google才会同意"云冲印"读取这些照片。那么,"云冲印"怎样获得用户的授权呢?
传统方法是,用户将自己的Google用户名和密码,告诉"云冲印",后者就可以读取用户的照片了。这样的做法有以下几个严重的缺点。
1.2 名词概念
OAuth 就是为了解决上面这些问题而诞生的。在详解 OAuth 之前,需要明确一些基本的概念,从上面场景中抽象出以下概念。
第三方应用程序
Third-party application :第三方应用程序,本文中又称"客户端"(client),即上一节例子中的"云冲印"。
HTTP服务提供商
HTTP service :HTTP服务提供商,本文中简称"服务提供商",即上一节例子中的Google。
资源所有者
Resource Owner :资源所有者,本文中又称"用户"(user)。
用户代理
User Agent :用户代理,本文中就是指浏览器。
认证服务器
Authorization server :认证服务器,即服务提供商专门用来处理认证的服务器。
资源服务器
Resource server :资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。
知道了上面这些名词,就不难理解,OAuth的作用就是让"客户端"安全可控地获取"用户"的授权,从而可以和"服务商提供商"进行互动。
二、OAuth 的授权认证流程
2.1 认证思路
OAuth 在"客户端"与"服务提供商"之间,设置了一个 授权层 (authorization layer)。"客户端"不能直接登录"服务提供商",只能登录授权层,以此将用户与客户端区分开来。"客户端"登录授权层所用的令牌(token),与用户的密码不同。用户可以在登录的时候,指定授权层令牌的权限范围和有效期。
"客户端"登录授权层以后,"服务提供商"根据令牌的权限范围和有效期,向"客户端"开放用户储存的资料。
2.2 认证流程
官方 RFC 6749 文件中的 OAuth 2.0 流程图有点晦涩,优化了 一下:
上述中的第 2 步 是关键,即用户怎样才能给于客户端授权。有了这个授权以后,客户端就可以获取令牌,进而凭令牌获取资源。
三、四种授权模式
上一小节可以得出用户对客户端的授权动作是核心,客户端必须得到用户的授权(authorization grant),才能获得令牌(access token)。OAuth 2.0定义了四种授权方式:
3.1 授权码模式(authorization code)
授权码(authorization code)方式,指的是第三方应用先申请一个授权码,然后再用该码获取令牌。
3.2 简化模式(implicit)
有些 Web 应用是纯前端应用,没有后端。这时就不能用上面的方式了,必须将令牌储存在前端。RFC 6749 就规定了第二种方式,允许直接向前端颁发令牌。这种方式没有授权码这个中间步骤,所以称为(授权码)"隐藏式"(implicit)。
3.3 密码模式(resource owner password credentials)
如果你高度信任某个应用,RFC 6749 也允许用户把用户名和密码,直接告诉该应用。该应用就使用你的密码,申请令牌,这种方式称为"密码式"(password)。
3.4 客户端模式(client credentials)
最后一种方式是凭证式(client credentials),适用于没有前端的命令行应用,即在命令行下请求令牌。
四、授权码模式详解
4.1 授权码模式流程
授权码模式(authorization code)是功能最完整、流程最严密安全的授权模式。它的特点就是通过客户端的 后台服务器 ,与"服务提供商"的认证服务器进行互动。
注意这种方式适用于那些有后端的 Web 应用。授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏。
授权码模式流程如下:
从上述的流程描述可知,只有第 2 步需要用户进行授权操作,之后的流程都是在客户端的后台和认证服务器后台之前进行"静默"操作,对于用户来说是无感知的。
下面是上面这些步骤所需要的参数。
4.2 授权码模式流程的五个步骤
第 1 步骤
参数说明
第 1 步骤中,客户端申请认证的URI,包含以下参数:
示例
A 网站提供一个链接,用户后就会跳转到 B 网站,授权用户数据给 A 网站使用。下面就是 A 网站跳转 B 网站的一个示意链接:
上面 URL 中:
response_type参数表示要求返回授权码(code);
client_id参数让 B 网站知道是谁在请求;
redirect_uri参数是 B 网站接受或拒绝请求后的跳转网址;
scope参数表示要求的授权范围(这里是只读)。
第 2 步骤
第 2 步骤中,用户跳转后,B 网站会要求用户登录,然后询问是否同意给予 A 网站授权。
第 3 步骤
参数说明
第 3 步骤中,服务器回应客户端的URI,包含以下参数:
示例
在第 2 步骤用户表示同意之后,这时 B 网站就会跳回redirect_uri参数指定的网址。跳转时,会传回一个授权码,就像下面这样。
上面 URL 中,code参数就是授权码。
第 4 步骤
参数说明
第 4 步骤中,客户端向认证服务器申请令牌的HTTP请求,包含以下参数:
示例
在第 3 步骤中,A 网站拿到授权码以后,就可以在后端,向 B 网站请求令牌。
上面 URL 中:
client_id参数和client_secret参数用来让 B 确认 A 的身份(client_secret参数是保密的,因此只能在后端发请求);
grant_type参数的值是AUTHORIZATION_CODE,表示采用的授权方式是授权码;
code参数是上一步拿到的授权码;
redirect_uri参数是令牌颁发后的回调网址。
第 5 步骤
参数说明
第 5 步骤中,认证服务器发送的HTTP回复,包含以下参数:
示例
第 4 步骤中,B 网站收到请求以后,就会颁发令牌。具体做法是向redirect_uri指定的网址,发送一段 JSON 数据:
上面 JSON 数据中,access_token字段就是令牌,A 网站在后端拿到了。注意:HTTP头信息中明确指定不得缓存。
五、令牌(Token)传递方式
当客户端(第三方应用程序)拿到访问资源服务器的令牌时,便可以使用这个令牌进行资源访问了。
在第三方应用程序拿到access_token后,如何发送给资源服务器这个问题并没有在 RFC6729 文件中定义,而是作为一个单独的 RFC6750 文件中独立定义了。这里做以下简单的介绍,主要有三种方式如下:
5.1 请求头参数传递
Authorization Request Header Field,因为在HTTP应用层协议中,专门有定义一个授权使用的Request Header,所以也可以使用这种方式:
其中"Bearer "是固定的在access_token前面的头部信息。
5.2 表单编码传递
使用 Request Body 这种方式,有一个额外的要求,就是 Request Header 的Content-Type必须是固定的application/x-www-form-urlencoded,此外还有一个限制就是 不可以使用 GET 访问,这个好理解,毕竟 GET 请求是不能携带 Request Body 的。
5.3 URI 请求参数传递
URI Query Parameter,这种使用途径应该是最常见的一种方式,非常简单,比如:
在我们请求受保护的资源的 Url 后面追加一个 access_token 的参数即可。另外还有一点要求,就是 Client 需要设置以下 Request Header 的 Cache-Control:no-store ,用来阻止 access_token 不会被 Web 中间件给 log 下来,属于安全防护方面的一个考虑。
5.4 令牌的刷新
为了防止客户端使用一个令牌无限次数使用,令牌一般会有过期时间限制,当快要到期时,需要重新获取令牌,如果再重新走授权码的授权流程,对用户体验非常不好,于是 OAuth 2.0 允许用户自动更新令牌。
具体方法是,B 网站颁发令牌的时候,一次性颁发两个令牌,一个用于获取数据,另一个用于获取新的令牌(refresh token 字段)。令牌到期前,用户使用 refresh token 发一个请求,去更新令牌。
上面 URL 中:
grant_type参数为refresh_token表示要求更新令牌,此处的值固定为refresh_token,必选项;
client_id参数和client_secret参数用于确认身份;
refresh_token参数就是用于更新令牌的令牌。
B 网站验证通过以后,就会颁发新的令牌。
注意: 第三方应用服务器拿到刷新令牌必须存于服务器,通过后台进行重新获取新的令牌,以保障刷新令牌的保密性。
六、OAuth2的安全问题
6.1 CSRF攻击
应用程序在早期使用 OAuth2 的时候爆发过不少相关的安全方面的漏洞,其实仔细分析后会发现大都都是没有严格遵循 OAuth2 的安全相关的指导造成的,相关的漏洞事件自行搜索。
其实 OAuth2 在设计之初是已经做了很多安全方面的考虑,并且在 RFC6749 中加入了一些安全方面的规范指导。比如:
安全无小事,这方面是要靠各方面(开放平台,第三方开发者)共同防范的。
6.2 攻击流程
假设有用户张三,攻击者李四,第三方"云冲印"应用(它集成了第三方社交账号登录,并且允许用户将社交账号和"云冲印"中的账号进行绑定),以及 OAuth2 服务提供者 Google。
步骤1
攻击者李四登录"云冲印"网站,并且选择绑定自己的 Google 账号
步骤2
"云冲印"网站将李四重定向到 Google,由于他之前已经登录过 Google,所以 Google 直接向他显示是否授权"云冲印"访问的页面。
步骤3
李四在"同意授权"之后,截获 Google 服务器返回的含有Authorization code参数的HTTP响应。
步骤4
李四精心构造一个 Web 页面,它会触发"云冲印"网站向 Google 发起令牌申请的请求,而这个请求中的Authorization Code参数正是上一步截获到的 code。
步骤5
李四将这个 Web 页面放到互联网上,等待或者诱*受害者张三来访问。
步骤6
张三之前登录了"云冲印"网站,只是没有把自己的账号和其他社交账号绑定起来。在张三访问了李四准备的这个 Web 页面,令牌申请流程在张三的浏览器里被顺利触发,"云冲印"网站从 Google 那里获取到access_token,但是这个 token 以及通过它进一步获取到的用户信息却都是攻击者李四的。
步骤7
"云冲印"网站将李四的 Google 账号同张三的"云冲印"账号关联绑定起来,从此以后,李四就可以用自己的 Google 账号通过 OAuth 登录到张三在 "云冲印" 网站中的账号,堂而皇之的冒充张三的身份执行各种操作。
从整体上来看,本次 CSRF 攻击的时序图应该是下面这个样子的:
从上图中可以看出,造成 CSRF 攻击漏洞问题的关键点在于,OAuth2 的认证流程是分为好几步来完成的,在上一章节授权码模式流程中的流程图中的第 4步骤中,第三方应用在收到一个 GET 请求时,除了能知道当前用户的 cookie,以及 URL 中的Authorization Code之外,难以分辨出这个请求到底是用户本人的意愿,还是攻击者利用用户的身份伪造出来的请求。
于是,攻击者就能使用移花接木的手段,提前准备一个含有自己的Authorization Code的请求,并让受害者的浏览器来接着完成后续的令牌申请流程。
6.3 解决方案
要防止这样的攻击其实很容易,作为第三方应用的开发者,只需在 OAuth 认证过程中加入state参数,并验证它的参数值即可。具体细节如下:
state参数在 OAuth2 认证过程中不是必选参数,因此在早期第三方应用开发者在集成 OAuth2 认证的时候很容易会忽略它的存在,导致应用易受 CSRF 攻击。所以必须对这个安全问题重视起来。
安全是双方的,需要第三方应用和资源服务提供商均要严格遵守安全规范。如 QQ 互联的 OAuth2 API 中,state 参数是强制必选的参数,授权接口是基于 HTTPS 的加密通道等;作为第三方开发者在使用消费这些服务的时候也应该重视注意安全中存在的漏洞。
问题一:云盘有什么用 一个超大容量的网络硬盘 您可以把任何想要保存的数据上传 可以随时下载 方便快捷
问题二:什么是云盘?有什么作用 云盘就是你可以把你的东西存到上面,相当于虚拟的优盘,到其他地方都可以到云盘上下载
问题三:百度云盘有什么好处? 空间大、速度快、安全稳固,支持教育网加速,支持手机端。现在注册即有机会享受15G的免费存储空间
问题四:云盘都有什么功能 您好,
百度云提供的是个人云存储服务,您可以把自己的资源、文件上传到云端,永久保存,省去硬盘、u盘,并且可以在云端进行一系列操作,比如:免费分享文件给小伙伴,在线看**,离线下载等等。百度云在各个终端(iPhone、Android、MAC、iPad)都有客户端,可同步使用,非常便利。
而且在手机上安装百度云客户端后,可以备份照片、通讯录、通话记录、短信,给宝贵的数据多了一层保护,Android手机客户端还有手机找回功能。
希望我的回答对您有所帮助,能得到您的采纳!
问题五:百度云盘有什么用处? 就是个网络优盘,只要有网络的地方就可以随时打开使用。前提是你得上传文件、用的时候下载下来!还可以分享给他人也可以在线查看。
问题六:云盘有什么作用 云盘就是你可以把你的东西存到上面,相当于虚拟的优盘,到其他地方都可以到云盘上下载
问题七:手机云盘都有什么用处呢? 一、手机云盘专门为智能手机和平板电脑设计,将存储技术与无线技术结合,硬件产品与客户端应用软件整合,实现了集云存储、路由、移动电源等多种功能于一体,满足用户扩容、备份、分享、多人上网和及时充电的多方面需求的分享式云存储服务产品。
二、主要功能
1、无线分享
通过智能手机/平板即可与朋友快速分享产品中的**、音乐、等。通过Echoii(一可科技) 客户端软件、网页界面皆可实现无线存储与即时播放。 同时,用户们可以通过Echoii客户端,实现存储中文件各项管理。
2、无线扩容与备份
通过Wi-Fi扩充智能手机/平板的存储容量,轻松备份重要数据。只要通过Wi-Fi无线连接到手机云盘,即可瞬间让智能手机/平板电脑再扩大16G甚至1T的空间。可以将手机中不常看的、**、电视剧“转移到”手机云盘中,为手机/平板腾挪点空间,让运行速度更流畅。同时,还可以把手机中的通讯录、、短信等重要资料通过Wi-Fi备份到手机云盘中,以备不时之需。100M文件备份只需6秒. 在扩容和备份过程中,不需要数据线既可完成,也不需要耗费手机/平板的套餐流量,操作起来轻松便捷。有些手机云盘还支持移动硬盘、U盘、SD卡、TF卡中文件的无线分享,可以把移动硬盘变成Wi-Fi移动硬盘。
3、无线路由
最新的手机云盘产品采用802.11n技术,最高28Mbps的读取速度,支持最高达150M的无线数据传输。在室外,无线信号可以覆盖100m的范围;在室内它可以覆盖15m左右,是目前无线存储领域中信号最稳定的设备。无论在出差还是家中,只需一根网线即可打造一个无线局域网。连接网线/其他Wi-Fi即可在备份的同时,实现多人无线上网,。支持多达10部设备同时连接网络,看**、听音乐、看新闻、写邮件便可一网打尽,保证8部设备同时在线观看同时观看**不卡顿。
4、移动电源
手机云盘通常带有内置电池,外出携带与使用的便捷性大大增强,随时随地地分享也能实现。同时,手机云盘还可以为手机、平板电脑充电,这样全天候为手机/平板服务才称得上手机云盘。
问题八:手机云盘是干什么的?有什么用途??? 上传你的电话簿,换电话的时候可以直接下载下来,但必须是同一个牌子的
问题九:百度云盘有什么用? 百度云(Baidu Cloud)是百度推出的一项云存储服务,首次注册即有机会获得2T的空间,已覆盖主流PC和手机操作系统,包含Web版、Windows版、Mac版、Android版、iphone版和Windows
Phone版,用户将可以轻松将自己的文件上传到网盘上,并可跨终端随时随地查看和分享。
百度云个人版是百度面向个人用户的云服务,满足用户工作生活各类需求,已上线的产品包括网盘、个人主页、群组功能、通讯录、相册、人脸识别、文章、记事本、短信、手机找回。
网盘
提供多元化数据存储服务,支持最大2T容量空间,用户可自由管理网盘存储文件。
个人主页
提供个性化分享功能和优质资源聚合服务,用户可通过关注功能获得好友分享动态,实现资源共享。
群组功能
百度云推出多人群组功能,既能够单纯点对点、更可以一对多、多对多的直接对话。这也是国内首个能够进行云存储社交的云服务平台。
相册
用户可以通过云相册来便利地存储、浏览、分享、管理自己的照片,用照片记录和分享生活中的美好。
人脸识别
百度云不仅能实现智能分类、自动去重等功能,还能以图搜图,在海量中精准定位目标。
通讯录备份
百度云手机APP功能,提供通讯录同步、短信备份功能。iPhone用户可实现通讯录同步;android用户可同步通讯录,备份恢复手机短信。WP暂不支持此功能。
手机找回
百度云android版独有功能。用户设置找回功能后,在手机遗失时,可通过百度云web版在线锁定手机避免信息泄露,同时可发出警报、追踪定位提升手机找回的可能性。
手机忘带
用户需要在Android手机上安装新版百度云APP,同时在PC端安装新版云管家。当百度云App和百度云管家中的“发现-手机忘带”功能同时处于开启状态时,手机上的通讯信息能自动同步到云管家。用户通过云管家发起需求,即可查询近三天手机上的通话记录、短信。
记事本
百度云网络笔记功能,可在线编辑文档,直接保存至百度云。支持文字、、语音三种类型记事。
3百度云会员编辑
百度云会员有以下十项特权:
提速特权
云管家下载速度最高提升200%;
身份标识
点亮VIP会员身份标识,彰显尊贵身份;
历史版本
仅支持百度云管家自动备份的历史版本上升至100个;
云冲印
每月免费冲印10张6寸照片;
云解压
2G压缩包文件在线查看,包内200M文件可直接解压或下载;
5T超大空间
免任务获得2T永久空间额外再加3T空间;
大文件上传
VIP使用百度云管家可上传最大20G单文件;
转存上限提升
单次转存文件提升至5000个;
人脸搜索
通过图像识别技术搜索百度云内全部;
大导演特权
使用20张创作照片**;
全文检索
可以搜索文档里的全部文字(年费用户专享)
4特色功能编辑
超大空间
百度云提供2T永久免费容量。可供用户存储海量数据。
文件预览
百度云支持常规格式的、音频、视频、文档文件的在线预览,无需下载文件到本地即可轻松查看文件。
视频播放
百度云支持主流格式视频在线播放。用户可根据自己的需求和网络情况选择“清晰”和“原画”两种模式。百度云android版、iOS版同样支持视频播放功能,让用户随时随地观看视频。
离线下载
百度云Web版支持离线下载功能。已支持/ftp/电驴协议/磁力链和BT种子离线下载。通过使用离线下载功能,用户无需浪费个人宝贵时间,只需提交下载地址和种子文件,即可通过百度云服务器下载文件至个人网盘。
在线解压缩
百度云web版支持压缩包在线解压500MB以内的压缩包,查看......>>
问题十:“云盘”和“云相册”是什么?各自有什么作用? 云盘就是可以在网上存储一些数据/文件然后可以在其他设备下载使用.类似银行
把钱存入银行--通过取款机取现
把文件存入云盘--其他电脑/手机下载文件.
云相册:
云相册顾名思义专业提供手机相片存储服务。
1自动上传
在经过您的允许后,您在手机上拍摄的照片会自动上传到云相册。您就能随时随地在云相册上看到您手机拍摄的照片。无需您手动操作。
2自动同步
云相册[1] 中的照片,也会同步到您的手机上,以及您安装有相关软件的电脑上。您可以很轻松的找到并查看您曾经拍过的照片。同步照片就是这么简单。
3轻松分享
无论您是走在路上,还是坐在电脑前,还是在其他任何能上网的地方,您都可以云相册快速把您的照片分享到微博、人人等社交平台上。