转载自http://www.html-js.com/?p=1297html
最近看人人网的OAuth认证,发现他是OAuth2.0,以前一直看的是新浪的OAuth,是OAuth1.0.数据库
两者仍是有不少不一样的,主要的不一样点在access token的获取方式.api
OAuth1.0的access token获取过来以后,就能够存到数据库里,而后长期使用,由于它有效期很长,一般有效期是无限的.安全
可是OAuth2.0为了加强安全性,access token的有效期被大大缩短,一般只有几个小时,也能够申请增长到几十天,可是老是会有过时的时候.session
为此,OAuth2.0增长了一个refresh token的概念,这个token并不能用于请求api.它是用来在access token过时后刷新access token的一个标记.htm
这里所描述的场景,一般是指那种长周期的应用.也就是须要一直保持用户在线的应用.token
在线并非说用户一直在用这个应用,也多是用户已经离开,咱们在后台仍然能够自动维持用户的状态.例如一个自动发状态的应用.用户并不须要操做这个应用,咱们会定时在后台利用用户的accesskey帮助用户发送状态.这也算是用户维持登陆状态的一种.生命周期
登陆状态的维持,在OAuth中靠的是access token,只要咱们的应用定时从数据库里取出用户的access token,而后利用access token就可使用这个用户的身份去请求api了.队列
在OAuth1.0中用户的登陆状态是一直存在的.get
在OAuth2.0中用户的登陆状态须要经过不断刷新来维持.
例如上面提到的应用.假设更详细的场景,这个应用在用户受权以后,天天给用户的人人网发送一条状态报告当天的日期.
用户受权以后,获取到一个access token和一个refresh token,还有一个是session key,这个是国内大多数开放平台本身添加的一个标记,可让用户使用http来调用api,若是没有它,用户只能经过https来调用api.session key的生命周期和access token是相同的.
咱们把这三个值存到一个队列的数据库中.
而后,在天天的10点,咱们遍历这个数据库表,取出它的access token和session key,而后用他们去请求api,若是发现他们已通过期,咱们就须要利用refresh token去从新刷新,获取新的access token和session key.而后利用他们去请求api,若是请求的时候提示refresh token也已通过期,那么这时候用户的登陆状态就会过时,这说明这个用户至少2各月没有在此应用活跃了,这个活跃不光指用户本身在使用应用,也包括应用自动调用用户api的行为.
每次刷新token的时候都会返回一个新的refresh token,因此说若是你的应用每月帮用户发一条状态的话,走上面的流程,一直下去,这个用户的登陆状态一直都不会过时,至于为何,本身去琢磨哦,琢磨透了也就理解了.
目前新浪微博的Oauth2.0的refresh token不对外开放。