2017-02-22 59 views
14

我正在開發一個oAuth2服務器,我偶然發現了這個問題。oAuth服務器應該向同一個客戶端請求提供相同的accessToken嗎?

讓我們假設在我的令牌被設置爲一個小時內到期的情況。在此時間段內,某些客戶端使用相同的client_id和相同的redirect_uri執行了50次隱式驗證。基本上相同的一切。

我是否應該在第一個請求上生成相同的accessToken直到它到期或者我應該在每個請求上發出新的accessToken

發送同樣的好處是,我不會離開客戶的陳舊和未使用的令牌在服務器上,最小化窗口的攻擊者試圖猜測一個有效的令牌。

我知道我應該限速的事情,我這樣做,但在從數千種不同的機器的大僵屍網絡攻擊的情況下,一些限制不會立即生效。

不過,我不知道該解決方案的缺點,這就是爲什麼我來到這裏。這是一個有效的解決方案?

回答

4

我寧願說 - 不。

原因:

  1. 你永遠不應該訪問令牌存儲在授權服務器端純文本。訪問令牌是憑據,應存儲散列。無論如何,醃製可能沒有必要,因爲它們是生成字符串。見OAuth RFC point 10.3
  2. 取決於你如何處理後續的請求 - 誰知道某一個資源擁有者正在使用您的服務,並重復請求所使用的客戶端id的攻擊者。這樣攻擊者就可以模擬資源所有者。如果您真的返回相同的標記,那麼至少應確保您每次驗證資源所有者。
  3. 「狀態」參數怎麼樣?如果狀態參數不同,你會認爲請求是「相同的」嗎?如果沒有,那麼僵屍網絡攻擊每次只會使用一個不同的狀態,並迫使你發佈新的令牌。

另外 - 通常通過應用程序邏輯防禦僵屍網絡攻擊非常困難。服務器暴露你的AS到互聯網應該照顧。在應用層上,您應該注意它不會從小帶寬攻擊中解脫出來。

+0

我對你的第三點感到困惑。 OP沒有提及「狀態」參數。我不認爲狀態會作爲參數發送來獲取新的令牌。 –

+0

@KiranShakya客戶端可以自由發送或不發送狀態參數。如果授權服務器將授權請求傳遞給配置的重定向URI,則授權服務器必須發送狀態參數。請參閱https://tools.ietf.org/html/rfc6749#section-4.2.2。所以它是相關的。 – vap78

+0

在第2點有更多的請求,可能會減慢響應時間。如果我錯了,請更正我 – Prageeth

3

可以返回相同的access_token,如果它仍然是有效的,沒有問題這一點。唯一的缺點可能在於,您使用隱式流程,因此在URL片段中重複發送相同的有效訪問令牌,這被認爲不如使用授權碼流程。

+1

雖然不是最好的做法,看這個另一種方式:在某種程度上你」 d將令牌存儲在AS中,而不是客戶端 –

1

當適當的認證請求後,也派出刷新令牌沿着你訪問令牌您可以發送不同訪問令牌

一旦訪問令牌到期,應通知用戶有關和先前提供給他們跳過無需重新用戶應重新請求新訪問令牌提供一次性使用刷新令牌 - 身份驗證,並且您應該提供新的訪問令牌刷新令牌

爲了抵制假冒刷新令牌的攻擊,您應該在發出少量警告後將它們與其原始IP一起列入黑名單。

PS:永遠不要使用可預測的標記。至少通過使用完全隨機的長字母數字字符串使暴力攻擊變得非常困難。如果您使用的是PHP,我會建議bin2hex(openssl_random_pseudo_bytes(512))

2

作爲一個經驗法則不要重用鍵,這將在重點攻克的情況下帶來額外的安全性所設計的系統

相關問題