2016-10-10 85 views
1

我有兩個客戶端,一個是由普通最終用戶通過我們的網頁或本地應用程序登錄的一個公共客戶端,另一個是我們管理系統的一個機密客戶端。兩者都發布兩個智威湯遜,一個訪問令牌和一個刷新令牌。使用Spring oAuth2 impl,是否可以在刷新令牌授權期間「降級」訪問令牌的範圍?

公共客戶端不允許發佈管理權限。訪問令牌是短暫的,刷新令牌具有無限的使用壽命。

Confidential Client被允許發佈管理作用域。訪問令牌是短暫的,刷新令牌生存24小時。

一旦刷新令牌過期,使用Spring Security及其oAuth2實現來降級管理員用戶是否可能?也就是說,一旦用戶登錄了24小時,用戶沒有完全註銷,但在下次登錄時,他獲得兩個新的JWT,一個用於常規用戶訪問的訪問令牌和一個與該訪問級別相匹配的刷新令牌。我想我正在尋找Spring Security框架中的某種鉤子,它允許我以自定義的方式處理令牌過期。

回答

1

你的問題上有一句話讓我困惑了一下,但我想詳細說明其他方面,所以這不適合評論。

...該用戶沒有完全在下次登錄時註銷,但他得到了兩個新的智威湯遜的,一個訪問令牌普通用戶訪問和一個匹配的刷新令牌的權限級別。

在下次登錄時是什麼意思?我的困惑在於,如果目標不是註銷用戶,那麼將不會成爲下一次登錄。我想這可能意味着,幾乎到了刷新令牌過期結束時,您會希望執行降級請求,並使用仍然有效的刷新令牌來獲取一組具有較少權限的新令牌。

根據OAuth規範,您可以執行刷新令牌請求,並要求服務器提供的訪問令牌的範圍比您當前擁有的範圍小。但是,它也規定如果返回新的刷新標記,則該標記需要與請求中包含的刷新標記具有完全相同的範圍。

就個人而言,對於這種情況,我會考慮的,而不是降級令牌只需確保爲了執行任何管理員有關操作的用戶必須是管理員,,實際上在過去24小時內提供他的證件。您可以通過跟蹤特定用戶實際執行登錄的日期和時間(通過提供他們的憑據)並根據該值授權管理員操作來完成此操作。通過這種方式,您可以增加機密客戶端的刷新令牌的生命週期,並且只有當管理員想要執行特權任務並且其當前令牌不夠新時,纔會再次登錄。

最後,還是對refresh tokens主題(重點在安全考慮部分)......當你說對公衆客戶我假設它的web應用程序是一個基於瀏覽器的JavaScript應用。如果這是正確的,通常不建議爲這些應用程序使用刷新令牌,因爲刷新令牌通常是長期存在的(在您的情況下,它們似乎永不過期),並且瀏覽器無法確保它們的安全存儲。這增加了它們泄漏的可能性,從而使得攻擊者可以在令牌的生命週期中訪問應用程序。您可能有其他限制,使這種安全考慮不適用,但我想請你注意它。

+0

隨着「下一次登錄」,我真的認爲「下一次與後端交互」,對不起。我猜想我無法更改刷新令牌的範圍,這真的回答了我的問題。你的建議很好,除非我得到太多的管理員互動。那麼我將失去分佈式授權的好處,並且我的帳戶服務的負載將會增加。我可能會再次結束會話緩存......如果不使用刷新令牌模式,我如何讓用戶使用JWT登錄並仍然可以(模擬)令牌的撤銷?我如何禁止使用name + pw登錄的用戶? –

+1

使用承載令牌(自包含的JWT)的缺點之一是令牌撤銷變得更加混亂,RFC 7009通過聲明在這些情況下授權服務器和資源服務器之間的後端交互可用於提供立即訪問令牌撤銷。我不相信有一個涵蓋交互的標準。 –

相關問題