2012-08-28 33 views
2

我正在使用使用OAuth2的API,提供的訪問令牌在3600秒內過期,並提供刷新令牌。最初,我等待API調用失敗,表明訪問令牌已過期,然後嘗試使用刷新令牌刷新訪問令牌。當訪問令牌過期並且同時進行多個API調用(每個調用分別觸發刷新並且大部分調用失敗)時,這會產生問題。適當刷新OAuth2訪問令牌的範例

在3600秒之後使用刷新令牌自動刷新訪問令牌會更好嗎? (或3599秒或3601秒?)我應該使用不同的範例來刷新訪問令牌嗎?

回答

1

理想情況下,客戶端應該有足夠的智慧來不使用過期的訪問令牌。幸運的是,您的OAuth AS的標記端點的響應應包含expires_in屬性,以確認到期時間將在3600秒內。例如爲:

{"token_type":"Bearer","expires_in":3600,"refresh_token":"p8BPdo01kkjh6fhatclD3wwBEQblm4kL4ctYRVlrHo","access_token":"9XebAAXeu6hQOAiwmOk8vdhRyUFV"} 

由於該JSON響應由服務器生成的,有一個機會,傳輸回客戶端已經採取時間,因此「expires_in」值可以是比看起來較小。

鑑於此,我建議您在到期前有一些緩衝區(比如5-10秒)自動使用刷新令牌來請求新的訪問令牌。

+0

所以我實際上應該在'(expires_in - 5)'或'(expires_in - 10)'幾秒後自動刷新? – Isaac

+0

我建議這種方法是 - 客戶當然有機會這樣做,因爲它已經有了信息。 –

+1

但是在OP的多個併發請求的場景中,一旦請求了新的令牌,那麼舊的令牌就會失效,所以如果在這個請求浪潮期間發生刷新,那麼任何請求已經得到(但還沒有使用)當其中一個請求刷新時,舊標記將失敗 – Magnus