0

谈谈OAuth(上)

作者微信号:code-n-more

微软公司开发了Windows操作系统,同时也开发了很多优秀的软件,比如众所周知的IE浏览器、Office办公软件等等,但是仅凭这些,并不足以成就软件巨头的一代霸业。Windows之所以能够成功,一个很重要的原因,就是Windows不仅仅是一款优秀的面向终端用户的操作系统,同时更是一个友好、开放的面向软件开发者的开发平台。

当Windows操作系统被开发出来之后,为了将其推向市场,吸引用户安装使用,微软公司必须要做到以下两点。首先,微软要保证Windows操作系统本身足够稳定,足够好用。其次,微软必须要花大力气,开发出丰富多彩的应用软件,以满足各种不同类型用户的不同需求。

第一点的重要性不言而喻,如果一个操作系统动辄死机或者黑屏,或者运行起来慢的要死,注定是不会赢得用户芳心的。这一点微软非常清楚,所以微软不惜重金,雇佣了世界上最优秀的一批软件工程师,潜心研发多年,将Windows打造成了一款制作精良用户体验极佳的产品。

第二点的重要性,微软也很清楚。Windows的界面再酷炫,操作再方便,可是如果只能在上面玩玩扫雷和纸牌,用户很快也会放弃。微软意识到应用软件的重要性,只有为Windows操作系统搭配海量丰富的应用软件,才能吸引并留住用户。但是同时微软也意识到,仅凭一己之力,这是一件不可能完成的任务。计算机用户有各种各样,而不同用户对于应用软件的需求是不同的,有的人需要图像处理软件,有的人需要视频制作软件,有的人需要网络通讯软件,等等。显然,微软不可能把这个世界上人类所需要的所有软件全部一一开发出来,这不是一个项目,或者说一个工程,而是一项事业,一项极其宏大的事业,微软必须借助很多很多其他人的力量来帮助它共同完成这项事业。

这些人,就是微软公司之外的软件开发者,或曰第三方软件开发者。为了吸引他们为Windows操作系统开发应用软件,微软必须像讨好Windows终端用户一样讨好第三方开发者,必须为他们设计出丰富易用的应用程序接口(API),提供功能强大的开发工具,设计灵活易用的编程框架,编写详尽完备的帮助文档,甚至设计更加友好的编程语言,等等等等。微软的确就是这么做的,结果也证明,微软的这个模式,取得了巨大的成功,不仅最终成就了微软自身的软件霸主地位,同时造就了许许多多的软件行业巨头,在各自领域独领风骚。更别说无数大大小小数不胜数,连名字都叫不上来的软件公司,无不都是依赖于微软公司的Windows操作系统生态圈而生存。

oauth-tutorial-01

如果把Windows平台比做舞台,那么各种应用软件就是这个舞台上的演员。舞台的作用为演员提供表演空间,照明设施,音响设备等各种资源。同理,Windows操作系统之所以能够称为一个平台,也是因为它可以为应用软件提供它们所需要的各种资源。对于计算机而言,最重要的资源就是机器的各种硬件设备,比如硬盘、内存、网卡、显示器等等。作为一个操作系统,Windows是计算机上一切资源的管理者,而作为一个应用平台,Windows为开发者所提供的API,本质作用就是将其所掌控的资源暴露出来,让第三方开发者,或者说第三方开发者编写的软件,也可以方便地使用。不同领域的应用软件,需要实现各自领域的业务逻辑,这些业务逻辑往往千差万别,形式各异,但是有一个共同点是,它们都需要在适当的时候操控计算机的资源。这种操作,可能是从硬盘读取一个文件,可能是通过网络发送一段数据,或者是在显示器上显示一幅图片,等等。所有这些资源的操作,都被Windows巧妙地封装了起来,形成了不同的API,而这些API,构成了Windows开发平台的基础。

微软公司既是Windows操作系统的提供者,也跟其他开发者一样,是这个平台上的应用软件开发者。微软根据自己的市场判断,针对性地选择了一些领域,比如办公软件,开发工具,网络浏览器等,精心打磨了几款优秀的软件,而这些软件,一方面由于产品本身确实非常优秀,另一方面由于市场先发优势,也都在各自领域也取得了不凡的成就,有些甚至在市场中处于垄断地位。就这样,微软既提供舞台又充当演员,与无数大大小小的软件开发者一起,开发了无数优秀的应用软件,这样的结果,一方面造福了广大Windows用户,用户的感觉是Windows越来越好用,能做的事情越来越多,另一方面却造成了这些用户越来越依赖Windows,越来越离不开Windows,切换操作系统的成本越来越高,而这一点,正是微软所乐意看到的。

时间的车轮滚滚向前,转眼我们从PC时代来到了互联网时代,我们惊奇地发现,在互联网时代,似乎一切都变了,软件变得免费了,浏览器变得万能了,产品迭代变得更快了,手机让网络无处不在了,等等等等。是的,互联网的确彻底颠覆了PC时代的很多东西。可是,如果拨开这些花里胡哨的外在,我们会发现,其实有一种东西,从PC时代到互联网时代,并没有任何变化。那就是,掌控资源的巨无霸公司,一手开发产品直接从用户手中赚钱,一手打造开放平台,将资源开放给其他开发者,从而间接地从用户手中赚钱,这个模式百试百灵,从PC时代一直延续到了互联网时代。说到现在,还没有提到OAuth,不过别着急,让我们再看一看互联网时代,另一家巨头的故事。

在腾讯公司推出聊天软件QQ的最初几年,大部分用户除了获得新奇的网聊体验之外,并没有几个人能够意识到这个小软件未来的商业价值会在哪里。但是慢慢地,随着互联网在中国的不断普及,再加上移动互联网的进一步推波助澜,有一天中国人突然惊奇地发现,身边的每一个人,不经意间居然都成为了网民,而每一个中国网民,基本上无一例外地都安装了腾讯的QQ和微信,而且,更加恐怖的是,他们在现实社会中的各种社交关系,也基本上被原封不动地映射到了他们的QQ或微信好友关系之中。没有一个用户需要为使用QQ和微信软件本身向腾讯付费,但是每一个用户个体所产生的点滴信息,汇聚在腾讯公司的数据库上,形成的海量用户信息以及用户关系链,已然成为腾讯公司无比宝贵的资源,能够为其创造巨大的商业价值。

用户信息和用户关系信息这种资源,通过什么样的方式为腾讯创造价值呢?很简单,当腾讯开发了一种新产品,他能够做到不用花费一分钱推广成本,就以近乎光速把这个产品推广到中国的每一个网民面前。以QQ游戏为例,曾经国内最大的休闲游戏平台,联众世界,在最辉煌时刻,拥有2亿注册用户,月活跃用户1500万,最高同时在线人数60万,然而腾讯推出了QQ游戏之后,仅仅凭借将游戏客户端捆绑在QQ聊天工具上这个策略,只用了短短一年时间,就将联众从休闲游戏市场第一的宝座上挤下来。随后在端游市场,腾讯更是以类似的方式挤掉了盛大、网易,成为大型端游市场的第一名。

PC时代的微软Windows平台掌控的是计算机硬件资源,互联网时代的腾讯,所掌握的资源则是海量的用户信息。如果说微软通过设计API使Windows操作系统平台化,向第三方开发者开放计算机资源,是为了占有市场,带有一些迫不得已的成分在里面。那么,作为互联网时代的资源寡头,腾讯事实上已经形成了坚不可摧的用户关系壁垒,只要坚持使用所谓的跟随战略,任何一个互联网公司的任何一种创新产品,都可以被腾讯轻而易举地复制过来,然后通过其庞大的用户基础,将被复制者一举超越,甚至吞灭。既然如此,虽然同作为资源的拥有者,但是跟微软Windows不同,腾讯不用依赖任何第三方将市场做大,似乎没有将其资源对外开放的必要。蛋糕很大,腾讯一口也吃不完,但是它丝毫不用担心,它可以慢慢吃,因为蛋糕就是它的,其他人也抢不走。

腾讯自己一开始确实也是这么认为的,凭借其庞大的用户基础及附着的用户关系,在各个领域开疆辟野,遍地开花,打遍天下无敌手,获得了商业上的巨大成功,然而商业上的成功,也仅仅只是商业上的成功,与此同时,腾讯公司却不断背负越来越多的恶名,一段时间,互联网业内甚至普遍称腾讯为“狗日的腾讯”,视其为贪婪,山寨,抄袭的代名词。著名的3Q大战之后,腾讯在普通用户中的形象也遭受到沉重打击。腾讯意识到开放平台的重要性。一方面,从腾讯自身而言,当用户量达到一定规模,用户需求的多元化逐渐凸显,哪怕雇佣再多的工程师,开发出越来越多的产品,仍然难以满足海量用户日新月异的个性需求。而且,多线作战,势必造成资源分散,产品打磨上无法一如既往地追求精益求精,长期下去,必然影响用户体验,而用户体验与口碑,对一个互联网公司的重要性,是不言而喻的。另一方面,坚持不开放,坚持自己开发产品,就意味着腾讯的敌人会越来越多,只要踏入一个新领域,开发一种新产品,就会增加一个敌人,或者一群敌人。对于一家公司而言,哪怕你再厉害,壁垒再强大,敌人越来越多,显然不是什么好事。而如果腾讯通过打造一个开放平台,将其掌握的资源开放给第三方开发者,并从他们那里分享利润,这样一来,腾讯不仅钱没有少赚,而且社会效益也是截然相反,它赚的越来越多的同时,收获的越来越多的,将不再是敌人,而是朋友和伙伴。当越来越多的小伙伴们在腾讯平台上赚到钱后,就会源源不断地吸引更多的小伙伴们过来,最后每个人都赚了钱,同时每个人也都再也离不开腾讯,而这,正是PC时代微软成功的秘诀。

跟PC时代的微软一样,腾讯作出了同样的选择:打造平台,开放资源。腾讯开放平台的本质是通过提供各种API,将其掌握的资源暴露给第三方开发者使用,与Windows不同的是,资源从计算机硬件设备,变成了用户在腾讯数据库上的数据,比如用户的头像,昵称,或者好友,等等。另外很关键的一点是,与计算机硬件资源不同,这种用户资源是受保护的,一个QQ用户可以从腾讯获得自己的好友列表,但是却无法获得别人的好友列表。也就是说,从腾讯获得这些资源信息,必须要经过授权,对于一个QQ用户而言,这个授权在其登陆QQ之时完成的,你无论身处何地,只要连上网络,登陆QQ,就可以瞬间把你的头像,昵称,等级,好友等等一切信息从腾讯公司的数据库拉取到本地。

而对于第三方开发者,如果它希望获取腾讯数据库上存储的用户资源,应该如何完成这个授权过程呢?这是一个很棘手的问题,显然,腾讯不可能不加阻拦,允许任何第三方开发者,获取任何用户的资源。这种不加保护的资源开放,是一种自掘坟墓的行为,一旦如此,腾讯相当于将其赖以生存的核心资源 — 多年积累的海量用户关系链拱手相让,腾讯显然不会这么做。那么,又要对第三方开发者暴露资源,又需要进行权限的控制,这个应该怎么做呢?一个基本原则是,腾讯允许第三方开发者通过调用其提供的API获得用户的信息,但是必须附带上这个用户的授权。也就是说,第三方开发者必须明确告诉腾讯,他是在征得了用户同意的情况下,发起的资源请求。这是天然合理的,因为用户的资源虽然存储在腾讯的数据库里,但是腾讯并没有权力擅自将用户的信息暴露给第三方,只有在征得用户明确同意的情况下,它才可以这样做。

那么,第三方开发者是通过什么样的方式,获得用户的授权,并将其出示给腾讯,从而完成资源请求API调用的呢?答案就是OAuth。从技术层面,OAuth授权机制,为腾讯乃至其他类似互联网巨头们打开大门、开放资源,破除了最后一道障碍,可以说居功甚伟。那么OAuth究竟是怎么样解决这个问题的呢?天色已不早,且留到下一篇再见分晓。

 



王 剑

发表评论

电子邮件地址不会被公开。 必填项已用*标注