|
基于Android平台的人人网应用程序的开发
第六篇:刷新令牌,使用户可以自动登录
官方文档:http://wiki.dev.renren.com/wiki/%E4%BD%BF%E7%94%A8Refresh_Token
根据OAUTH2.0协议的说法,我们获取的access_token有效期很短,人人网最开始应用的时候设定access_token的有效期为24小时,后来延长为2天,后来又延长为7天,现在好像是一个月了,可能开始安全性无法保证,就时间短点,经过这么长时间的测试,已经很稳定了,所以时间就长点了。
即使这样,依然无法实现像OAUTH1.0的那种效果,用户只要输入一次用户名和密码,第三方应用就可以获得access_token和access_secret,保存到数据库或者SharedPreferences中,以后用户不需要重复输入用户名和密码就可以直接登录。那么在OAUTH2.0中,我们如何实现这个效果呢?既然是升级的OAUTH协议,必然有它的简单方法。本讲,我们就说说如何实现让用户一次登陆,以后就可以直接进入应用程序的主界面。
我们在获取access_token的同时,也会得到如下几个值:
{
"access_token": "10000|5.a6b7dbd428f731035f771b8d15063f61.86400.1292922000-222209506",
"expires_in": 87063,
"refresh_token": "10000|5.385d55f8615fdfd9edb7c4b5ebdc3e39.604800.1293440400-222209506",
"scope": "publish_feed email"
}
? access_token:要获取的Access Token;
? expires_in:Access Token的有效期,一秒为单位;
? refresh_token:用于刷新Access Token 的 Refresh Token;
? scope:Access Token最终的访问范围,既用户实际授予的权限列表(用户在授权页面时,有可能会取消掉某些请求的权限)。
这里的refresh_token就是用来刷新access_token用的。
Refresh Token有效期两个月,用于刷新Access Token。
只要用户在两个月内登陆应用,应用就可以使用Refresh Token刷新新的Access Token(新的Refresh Token也会同时下发)。
这样就可以达到这样一个效果:用户只要不连续两个月未布登陆你的应用,就不需要重新登陆。
PS:如果用户两个月都没来你的应用,你继续保持着用户这个登录状态也没什么必要。
因此,我们可以在用户第一次登陆的饿时候,记录下access_token和refresh_token,存入数据库或者文件中或者SharedPreferences。用户以后每次登陆,都用refresh_token去刷新access_token,获取新的access_token和refresh_token。这样用户每次登陆的时候去数据库中取出access_token,就可以不用每次都输入用户名和密码了。
注意:使用user-flow的方式,即mobile客户端的方式验证授权是不返回refresh_token的,那么就是说无法刷新access_token,没办法使用户始终保持登陆的状态,这样用户体验岂不是很不好?为此,我问了人人网的技术人员,他们说,就是这么设计的,可能是为了防止用户手机丢失,被别人使用。这里给大家提个醒,如果想要使用户始终保持登陆的状态,就只能使用web-flow的验证授权方式。 |
|