【轉】OAuth2.0的refresh token

轉載自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不對外開放。

相關文章
相關標籤/搜索