在描述鉴权和流控之前,可能需要先描述为什么需要搭建开放平台。
开放平台最先由FB推出,而后在2012年左右,国内比较大型的互联网公司都开始搭建自己的开放平台。搭建属于自己的开放平台的原因,一般是以下几点:
1.借助第三方满足用户的零碎需求
2.借助第三方提升自己的影响力
3.作为渠道获得第三方应用带来的红利
4.加深与用户的粘连
OAuth2.0协议是一个协议,不是具体的框架或者实现,这个协议定义了一个流程,保证这个流程的实现相应的保证权限管理的成功。
OAuth2.0中主要规定了三方。
1.第三方程序
2.用户
3.保存用户信息的服务器
OAuth2.0协议出现是为了解决第三方程序可以获取保存在服务器上的用户的信息但用户又能不将自己的账号密码告知第三方程序。
这个过程通过3个流程来实现。
1.第三方程序向平台注册应用,获取AppKey,Appsecret。
2.第三方程序向平台提供的接口1发起请求,平台向用户索要账号密码,验证通过后返回给第三方程序一个code(临时授权码)。
3.第三方程序拿着这个code再次向平台提供的接口2发起请求,并需一同提供AppKey,Appsecret,平台校验通过后返回accessToken,第三方程序就可以拿着这个accessToken开始真正的业务操作了。
code的出现,是为了防止中间人攻击,即,平台需要第三方程序证明是其需要获取用户的信息,而不是拦截下信息的其他程序。
除了accessToken,一些开放平台,比如微信,会一同返回refreshToken,其用来刷新accessToken。
以新浪开放平台和微信开放平台为例,描述鉴权的实现流程.
新浪API:
微信API:
所以,我们可以定义三个接口:
public String generateRequestToken(String appKey) throws AuthorizeException;
此接口用于获取code
public OpenRefreshToken generateAccessToken(String appKey, final String appSecret, String requestToken) throws AuthorizeException;
此接口用于获取accessToken。
如果参见新浪api和微信api的授权返回值,其分别如下:
新浪API
{
"accesstoken":"ACCESSTOKEN",
"expires_in":"1234",
"uid":"123456"
}
微信API
{
"accessToken":"ACCESS_TOKEN",
"expires_in":"7200",
"refresh_token":"REFRESHTOKEN",
"o