天天看点

第三方登录access token过期问题

前几天参加面试的时候,被面试官问道第三方登录的问题,流程其实很简单,但是当面试官问为什么要保存access token,它过不过期有什么意义。当时答得不是很对,现在总结一下:

第三方登录流程

  • 第一步:获取 code:
https://graph.qq.com/oauth2.0/authorize?
response_type=code      //固定写法
&client_id=" . $app_id . " //腾讯给的APPID
&redirect_uri=" . urlencode($my_url) . "   //回调地址
&state=". $_SESSION['state'];
$Scope="get_user_info" 这个是     //网站申请获取用户的信息
           
  • 第二步:根据 code 获取 access_token
https://graph.qq.com/oauth2/token?
grant_type=authorization_code       //固定写法
&client_id=[YOUR_APP_ID]        //APP_ID
&client_secret=[YOUR_APP_Key]       //APP_KEY
&code=[The_AUTHORIZATION_CODE]  //Authorization Code 的值
&state=[The_CLIENT_STATE]       //防止攻击
&redirect_uri=[YOUR_REDIRECT_URI]   //回调
           
  • 第三步:使用Access Token来获取用户的OpenID
https://graph.qq.com/oauth2/me?access_token=YOUR_ACCESS_TOKEN 
           

openID用户是在这个网站的标识,用户第一次登录还是再次登录就是用这个标识的。通过openID和appID和access_token使用OpenAPI接口来获取用户的信息。具体API的使用请阅读第三方提供方的文档。

进入正题,要理解access_token的作用,和他为什么有三个月的过去问题,那么我们必须了解两点:

1.网站什么时候获取到access_token?

当用户点击第三方登录图标,并授权允许登录,这个时候网站才能获取到access_token。

2.access_token的作用?

使用Access Token来获取用户的OpenID,然后可以使用OpenID来获取用户的信息。

从上面两步就可以看出,当用户授权登录到网站后,网站就可以获取到这个access_token。这个时候假如,假如access_token没有过期时间,那么以后网站可以使用保存下来的access_token来永久的获取用户的信息,这样当然不可以啦,所以第三方规定了access_token有三个月的时间,如果用户在三个月后都没有登录过这个网站,那么这个网站所保存的access_token也就过期了,再也不能获取用户新的信息了,只有等到下一次用户重新授权登录的时候,网站从新获取access_token才能再次获取用户信息。

继续阅读