重要声明:本文章仅仅代表了作者个人对此观点的理解和表述。读者请查阅时持自己的意见进行讨论。
疑问来源
1、微信公众号授权登录
在做微信公账号授权获取用户信息时,就会有这样的步骤:
引导用户进入授权界面
->用户同意授权
->回调成功地址
->在成功地址里获取access_token
->使用access_token获取用户信息
这一套流程下来,基本就可以获取到微信用户的基本信息和openid了。
2、网页通过第三方登录
同样的,当你自己的网站想要实现使用QQ或者微博作为第三方便捷登录时,也要进行和上面类似的全套流程。这个流程其实是OAuth2.0
授权里的一小部分知识。
那么,这个时候问题就来了,用户每次登录时都要先进入引导界面,然后授权成功回调,获取access_token。问题就是,既然每次都要走这么一遍流程,那么每次拿到的access_token就都是新的。可几乎每个文档里都写着:access_token的过期时间是多长多长的。
我合计着就想,这每次都是拿到新的,以前的也不会保存下来,为啥这东西还得定义一个过期时间呢?拿来干嘛的啊?
解释
当我发现access_token有过期时间这件事的的确确是一件正确的事情时,我就意识到了我是多么的愚蠢。以前之所以认为它的过期时间感觉毫无意义,其实就是因为 图痒图森破 。
如果你在接入第三方登录时,只有一个需求,那就是:使用第三方登录。 那么这时access_token的过期时间这一个说法对你来说的确是没有意义的,因为确确实实每次登录都相当于一次全新的授权,而且你甚至都不需要保存access_token这个数据到数据库。
如果你的系统不仅仅是只进行登录这么简单,那么,你就非常有必要注意access_token的过期时间了。当用户准许授权,你拿到了其access_token后,你就可以在access_token的有效使用期内,访问用户所有授权时指定的那些敏感操作了,而这些功能是远远超出了仅仅一个第三方授权登录那么简单的事情了。常常用户自己过一段时间就忘记了自己授权过哪些网站了,如果没有过期时间的限定,岂不是网站能永久的获取用户的这些信息了,如果权限大一点还能发布些什么也说不定。而有了过期时间,那么安全度就提升了非常多,当access_token过期后,就必须重新授权一次,此时必须用户亲自参与进来。