首页 > 代码库 > iOS开发项目篇—16OAuth授权简介
iOS开发项目篇—16OAuth授权简介
iOS开发项目篇—16OAuth授权简介
一、资源的授权
在互联网行业,公司要能长期存活下来,用户量很重要,比如腾讯、新浪,它们的用户量是非常巨大的
要想长期留住用户,用户资源(数据)的管理也很重要,如果你经常在不经过用户同意的情况下,把用户的一些资源共享出去,那肯定是留不住用户的,甚至会遭到法律的制裁
但是,有时候确实要把某些用户资源共享出去,比如第三方想访问用户的QQ数据、第三方想访问用户的新浪微博数据
要想把用户资源共享出去,就必须取得用户的同意,那么这里就有个资源授权的问题
资源授权的方式有很多种,关键是要安全,常用的有OAuth授权
二、OAuth简介
OAuth是一种协议,OAuth协议为用户资源的授权提供了一个安全的、开放而又简易的标准
任何服务提供商只要想把自己的用户资源共享出去,都可以实现自身的OAuth认证服务。比如腾讯可以实现自己的OAuth认证服务,把用户的QQ数据共享出去
同时,任何第三方都可以使用OAuth认证服务
第三方若想访问用户资源,就必须遵守服务提供商实现的OAuth协议
总结一下,OAuth可以用来控制用户资源的访问权限。比如我们想访问用户的新浪微博数据,就必须通过新浪实现的OAuth认证
三、OAuth产生的背景
1.问题:假如你正在使用美图秀秀处理你的相片,处理完后觉得自己好美哦,决定把图片分享到自己的新浪微博,有什么解决方案?
解决方案:
第1种方案
(1) 步骤 :你先使用美图秀秀将处理完的图片保存到硬盘上;然后再登录你的微博账号,把事先保存在硬盘上的图片上传到微博,然后发一条微博分享出去
(2)评价 :这种方式很安全,但处理比较繁琐,效率低下
第2种方案
(1)步骤 :你将自己的新浪微博账号直接提供给美图秀秀,美图秀秀再利用你的新浪微博账号自动发一条微博,将处理完的图片分享出去
(2)评价 :这种方式效率是提高了,但是安全性大大降低了,美图秀秀可以使用你的新浪微博账号去查看你的所有隐私甚至篡改你的资料
2.提问:有没有安全又高效的方案呢?在不让美图秀秀知道自己的微博账号密码的前提下,自动帮我发送一条微博,将图片分享出去
思考:
(1)首先,要想美图秀秀自动发微博,肯定要调用新浪微博的API接口,所以新浪要开放自己的API;
(2)其次,如果新浪把API开放了,美图秀秀可以调用了,但是也不可能让它随意访问每个用户的资源,需要用户批准、用户授权,而且授权的过程中不能让美图秀秀知道微博的账号密码
解决步骤:
(1) 新浪开放自己的API
(2)用户对资源进行授权(最后,美图秀秀应该在不知道用户的微博账号密码的前提下,自动发送微博进行分享图片)
3.提问:上面提到需要用户对资源进行授权,那有没有安全的授权方式呢?
答:很多公司和个人都尝试解决这类问题,包括Google、Yahoo、Microsoft,这也促使OAUTH项目组的产生
OAuth是由Blaine Cook、Chris Messina、Larry Halff 及David Recordon共同发起的,目的在于为API访问授权提供一个开放的标准
四、OAuth的优点
OAuth协议为用户资源的授权提供了一个安全的、开放而又简易的标准
OAuth的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的
五、授权的步骤
第三方想访问服务提供商的用户资源时,需要先进行OAuth授权
授权步骤总结就3点:
(1)获取未授权的Request Token(显示登录界面)
(2)获取用户授权的Request Token(登录)
(3)用授权的Request Token换取Access Token
(得到这个Access Token就相当于得到了一个“令牌”,通过此“令牌”请求,就可以去拥有资源的网站抓取任意有权限可以被抓取的资源)
说明:
OAuth的授权步骤1-获取未授权的Request Token
打开服务提供商提供的账号密码输入页面(比如新浪微博提供的)
OAuth的授权步骤2-获取用户授权的Request Token
如果用户是第一次登录第三方,会跳到一个授权页面。
点击“授权”后,会返回一个授权过后的Request Token
如果用户不是第一次登录第三方,就不会出现这个授权页面,会直接返回之前授权过的Request Token
新浪开发者证明
要想使用新浪提供的OAuth授权服务,还必须申请为新浪微博开发者,创建自己的应用,获取AppKey和AppSecret
AppKey和AppSecret在授权过程中作为请求参数使用
创建移动应用的地址:
http://open.weibo.com/apps/new?sort=mobile
创建完应用后,就可以在自己的应用界面查询到AppKey和AppSecret