![](/img/trans.png)
[英]Spring security OAuth2 Refresh Token - IllegalStateException, UserDetailsService is required
[英]Can / should I refresh an OAuth2 token with every request in spring security
我們使用username-password grant將我們的JS客戶端連接到我們的REST服務器。 在某種程度上,oauth / token返回的令牌是我們的會話,因為它允許在有限的時間內訪問后端。
每當我們使用令牌向后端發出請求時,我們都想刷新該會話/令牌。
我知道服務器發出了這個刷新令牌,我可以使用它在令牌過期后刷新令牌。
問題是:我不想讓客戶端負責捕獲令牌過期的異常,並在令牌過期之前重新驗證或安排刷新。 我希望令牌能夠刷新,直到它在有限的時間內不再使用 - 就像會話一樣。 (我也不希望它發出每個“數據”請求的刷新請求,雖然我想我記得讀過,刷新令牌只有一次...?!)
有沒有辦法在Spring安全性中做到這一點,還是我必須構建一些令牌存儲或我選擇的任何部分的自定義實現?
因為我無法找到答案(因此是帖子)我在想:也許這樣做是不明智的,盡管我不明白為什么。 如果我可以竊取令牌,我也可以竊取刷新令牌。 所以我想我真的沒有看到首先有一個刷新令牌的重點..
編輯
為了回應Luke Taylor的回答,我將澄清我們的用例。
因此,我們有一個REST服務器,需要提供對我們可信賴的應用程序的完全訪問權限,該應用程序執行自己的安全性工作,同一服務器需要為新的多租戶javascript客戶端應用程序的用戶提供訪問權限。 在生產中,我們將有幾個REST服務器,每個服務器都有自己的數據庫,但核心總是相同,所以理論上一個服務器應該能夠處理所有。
我希望令牌能夠刷新,直到它在有限的時間內不再使用 - 就像會話一樣
這實際上沒有意義(在OAuth2上下文中)。 訪問令牌由授權服務器發出,授權服務器決定它的有效期。 它在資源服務器上“使用”,資源服務器可能與授權服務器完全分離,因此OAuth2中沒有任何工具可以將使用與令牌的生命周期連接起來。 從理論上講,可能會將某些東西混合在一起,這使得這項工作成為可能,但這聽起來不錯。
如果我可以竊取令牌,我也可以竊取刷新令牌。 所以我想我真的沒有看到首先有一個刷新令牌的重點..
訪問令牌被重復使用,並由客戶端發送到授權服務器以外的服務器。 刷新令牌由客戶端保留,僅發送回授權服務器。 客戶端還必須進行身份驗證才能成功使用刷新令牌,因此客戶端ID和密碼也必須被泄露。
從您的問題中可以清楚地知道為什么使用OAuth2。 您可能應該擴展您的問題以澄清這一點。 如果只有一個客戶端和一個REST服務器,為什么不通過HTTPS使用BASIC auth之類的東西呢?
此外,客戶端是基於瀏覽器的應用程序嗎? 如果是這樣,用戶名/密碼授予不適合在不受信任的客戶端中使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.