从简单的例子了解 OAuth
从简单的例子了解 OAuth
在介绍 OAuth 2.0 之前,让我们来看一个简单的例子。假设你平时喜欢照相,将生活中的点点滴滴记录成电子照片并且存放到云盘上,每隔一段时间会将心仪的照片挑选出来进行打印保存。
同时你发现网络上面有一个款云打印照片的应用,只需要导入电子照片,这款应用就可以帮你进行打印然后将成片邮寄到你的家中。
我们将这个例子中的授权部分抽离出来形成图 1 ,如图 1 所示,左边是云打印的部分,也就是我们需要使用的互联网服务。右边绿色的部分是用户,也就是电子照片的资源拥有者。
图 1:云打印服务的授权过程
针对云盘而言有两个服务需要提供,一个是授权服务,也就是通过照片的所有者授权第三方应用使用照片资源,另一个就是资源服务本身,也就是照片资源的提供者。
通过图 1 的展示我们将整个请求云打印服务和授权的过程分为如下几个步骤:
- 用户请求云打印服务,此时运用只是单纯地请求服务,但是并没有提供电子照片的资源给云打印服务。
- 云打印服务接收到请求以后,由于没有电子照片云盘的访问权限,于是请求用户对云盘进行授权。
- 用户为了实现云打印服务,随之授权云打印去访问云盘中的电子照片。 云打印将用户的授权告诉云盘中的授权服务。
- 授权服务得知用户授权云打印服务可以打印用户在云盘中的照片时,返回给云打印服务访问权限。
- 拿到访问照片资源权限的云打印服务,利用该访问权限访问云盘上面的电子照片资源。
- 云盘上的资源服务接收到待访问权限的请求之后,返回电子照片,随后云打印服务开始打印服务。
OAuth 2.0 的定义和组成
从上面这个小例子可以发现当用户访问第三方的网络应用(云打印)的时候,需要通过授权的方式让云打印具备访问云盘资源的权限。
授权过后云盘的授权服务会返回给云打印应有的权限,注意这里并没有返回给云打印所有云盘权限。
例如:添加、删除、修改电子照片,只是根据用户的授权给了云打印部分的权限,也就是获取电子照片的权限。
为什么要经过这个授权的过程能,可以对其做如下分析:
- 如果为了打印照片,用户将访问云盘的用户名密码都交给云打印服务显然不太安全。
- 云打印在获得用户云盘授权的时候并不是获取所有的权限,而是获取部分权限,这个权限只是能够访问电子照片而已,而且通常而言还可以设置该权限的访问时长,例如:2小时或者 1 天,从而保证打印服务的正常进行。
- 如果此时云打印通过得知用户名和密码的方式访问云盘,那么云打印的系统被黑,就会导致云盘的资源被泄漏。
鉴于上面三点的分析,我们需要使用 OAuth 的方式进行授权。OAuth 认证是为了做到第三方应用在未获取到用户敏感信息(如:账号密码、用户 PIN 等)的情况下,能让用户授权予它来访问开放平台中的资源接口。
之所以使用 OAuth 2.0,是因为 OAuth 1.0 协议太复杂、易用性差较难普及。OAuth 2.0 通过新的协议设计,使用更加简单,更加容易普及。