本系列前两篇:
前面我们主要讨论了接口和契约的设计,本节讨论授权系统。
授权系统对于开放平台就像权限系统相当于普通电商网站,在整个系统中有个非常重要的作用。授权系统的目的是保障用户和企业数据的安全性,保证不被非法或者未经允许的调用数据,同时授权系统也不能太复杂,太复杂会提高开发者接入平台的门槛。
1. 开发者资质和接口权限分类
首先我们需要对开发者的申请进行严格的审查,申请的接口权限越高,则对开发者的资质要求越高。比如淘宝开放平台对于交易类API分为买家应用,卖家应用、商家应用、高级应用、专业应用等,普通的开发者只能申请到买家应用和卖家应用的角色,如果需要申请更高级的角色,则有更高的资质要求。
另外我们需要将我们的接口分成两类:公开查询类接口和隐私类接口。公开查询类接口即公开的非隐私的数据,如人人网开放平台中的用户基本信息(昵称、年龄等)和淘宝开放平台中的淘宝商品类目查询等接口。隐私类接口是非登录用户无法查看或者进行的操作类接口,如微博开放平台的发微博接口、苏宁开放平台的新增商品接口。
对于公开查询类接口,开发者可以不需用户授权直接调用接口查询,而对于隐私类接口,则需要用户的授权才可以调用。
总结下来其实就是把接口按照两个维度分开:一个维度是是否需要授权分成公开和隐私类;另一个维度是哪些资质开发者可调用,比如部分高级接口只准和公司签订协议的合作伙伴才能调用。
2. OAuth 2.0
最后一个问题是如何安全的让用户给开发者应用授权。在很久以前,人人网通过用户邮箱邀请联系人的方式是让用户提供邮箱的账号和密码,如下图:
作为当初人气颇高的国内知名网站,这么明目张胆的让我提供邮箱的账号和密码,我选择了不相信。而对于依附于开放平台的中小开发者,当然更不可能直接把账号和密码给他们。
那有没有在不提供账号密码的情况下将用户的部分权限授予第三方,并且可以方便的控制和回收所赋予权限的方法呢?答案是Oauth。Oauth目前已经发展到了Oauth2.0,具体的流程技术含量比较高,这么不做深入的讨论,只介绍下授权的步骤和简略的原理。
Oauth授权首先是用户点击链接,跳转到商家的授权页面。注意是商家的授权页面,也就杜绝了应用获得用户账号和密码的可能。
在商家授权页面中可以选择登录的账号,也可以选择授予的权限,这就达到了部分授权的目的。
当授权完成后,可以在自己的账号管理中方面的控制和回收所赋予的权限,如下图:
可以对每个应用的授权做修改
上面就是用户感受到的授权的过程,对于开发者来说,是通过这样的过程来换取被用户授权过的Token,拿到Token后就可以在用户授权的范围内调用相应的接口。
对于Token的有效期,平台可以做一些限制,常见的有如下规则:
a.一次性Token,即使用一次就失效。这种规则用的不多,因为会大大增加授权的复杂度。
b.Token的有效期是最后一次访问加上一定的时间,比如设定为最后一次访问后的第七天,类似于Session的机制。很多SNS的开放平台使用的是这种方式。
c.固定时间的Token,即Token的有效时间是固定的,比如固定一个月,到期后就需要用户再次授权。
d.长期有效,这种情况Token是一直有效的,除非用户在管理页面中取消了授权。
对不同的平台策略,可以选择不同的Token有效时间规则。需要注意一点,如果用户修改密码,则应该取消之前的所有授权。
如果想了解Oauth背后的技术原理,可以参看这篇文章:http://blog.csdn.net/alonesword/article/details/12190075。
作者:有bigger的产品狗
博客:http://www.jianshu.com/users/63e14c8782f2/latest_articles
本文版权归作者和简书共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
网友评论