2016-12-31 43 views
0

我有點困惑如何在php中正確使用auth_和refresh_token。PHP oauth2如何使用refresh_token

我已經使用oauth提供程序註冊了一個新的客戶端應用程序。在那之後我的應用程序發送客戶端ID和祕密到的oauth2授權端點返回如下:

Array 
(
    [result] => Array 
     (
      [access_token] => qjdcshsmgwcuvi7hzpgxwqapfb8aoab60fmprk1g 
      [expires_in] => 86400 
      [token_type] => Bearer 
      [scope] => basic 
      [refresh_token] => whnutk9npmaikcn1bxbovleuqn9ggn9j00jgyiph 
     ) 

    [code] => 200 
    [content_type] => application/json 
) 

太好了,我現在可以使用的的access_token查詢API。但access_token將在24小時後過期,整個舞蹈將再次開始。

問題:

  • 我在哪裏存儲的access_token整個過程不會在每次請求運行?一個會話不會持久化,在conf文件中,memcache是​​一個數據庫?)
  • 如何處理刷新令牌,我應該在會話中保存一個時間戳並檢查是否需要新的access_token?
+0

這就是refresh_token的全部目的。如果你的access_token被泄露了,它將不會被更新,但是refresh_token將會被使用,所以沒有人會使用這個令牌。使用這種方法帶來了將訪問令牌發送給客戶端的優勢。 – rpi

+0

@rpi感謝您的回覆。我的問題是我對auth流感到困惑。我是否必須檢查access_token是否必須按照上面所述進行更新,或者我是否開始這個過程f.e.從401錯誤響應?此外我的問題是在php中永久存儲令牌的位置。 –

+0

由於您知道訪問令牌將在24小時後過期,因此您可以輕鬆地將當前時間戳+24小時與您的請求一起存儲。您的應用程序還應該能夠訪問令牌無法更新的情況,因爲許可權可能已被吊銷。 – rpi

回答

0

如果您只在用戶在線時(如在登錄到應用程序時)使用這些令牌,那麼我會將它存儲在會話變量中。如果您還會在用戶不在線時使用令牌,則建議將它們存儲在數據庫中。 在第一種情況下,每次用戶登錄時您都會收到一個刷新令牌。在第二種情況下,您只會收到一次刷新令牌(即用戶將其第三方帳戶鏈接到您的應用程序時)。

要回答第二個問題,建議使用access_token存儲到期時間戳。

相關問題