第三方登入access token過期問題
阿新 • • 發佈:2019-02-10
前幾天參加面試的時候,被面試官問道第三方登入的問題,流程其實很簡單,但是當面試官問為什麼要儲存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.0/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.0/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才能再次獲取使用者資訊。