簡體   English   中英

可以/應該在spring security中為每個請求刷新OAuth2令牌

[英]Can / should I refresh an OAuth2 token with every request in spring security

我們使用username-password grant將我們的JS客戶端連接到我們的REST服務器。 在某種程度上,oauth / token返回的令牌是我們的會話,因為它允許在有限的時間內訪問后端。

每當我們使用令牌向后端發出請求時,我們都想刷新該會話/令牌。

我知道服務器發出了這個刷新令牌,我可以使用它在令牌過期后刷新令牌。

問題是:我不想讓客戶端負責捕獲令牌過期的異常,並在令牌過期之前重新驗證或安排刷新。 我希望令牌能夠刷新,直到它在有限的時間內不再使用 - 就像會話一樣。 (我也不希望它發出每個“數據”請求的刷新請求,雖然我想我記得讀過,刷新令牌只有一次...?!)

有沒有辦法在Spring安全性中做到這一點,還是我必須構建一些令牌存儲或我選擇的任何部分的自定義實現?

因為我無法找到答案(因此是帖子)我在想:也許這樣做是不明智的,盡管我不明白為什么。 如果我可以竊取令牌,我也可以竊取刷新令牌。 所以我想我真的沒有看到首先有一個刷新令牌的重點..

編輯

為了回應Luke Taylor的回答,我將澄清我們的用例。

  • 我們有一個REST服務器,可以保存人員等應用程序數據。 但也提供訪問我們的內容管理,並允許客戶發布到Facebook。 它封裝了應用程序邏輯和數據存儲
  • 我們已經有一個完全成熟的客戶端應用程序,它有自己的安全層,只需通過客戶端憑據流訪問我們的REST服務器上的數據。 誰可以做客戶端決定的事情
  • 我們有幾個中小型應用程序,比如facebook上的聯系人應用程序,它們也使用客戶端憑據訪問REST服務器上的數據
  • 我們現在正在開發一個客戶端應用程序,只使用javascript訪問REST層來完成大客戶端應用程序所做的所有工作,但還需要提供一種方法來驗證單個用戶並允許多租戶。 因此,此新客戶端應用程序使用用戶名 - 密碼授予進行身份驗證,並使用方法級別安全性來授權用戶

因此,我們有一個REST服務器,需要提供對我們可信賴的應用程序的完全訪問權限,該應用程序執行自己的安全性工作,同一服務器需要為新的多租戶javascript客戶端應用程序的用戶提供訪問權限。 在生產中,我們將有幾個REST服務器,每個服務器都有自己的數據庫,但核心總是相同,所以理論上一個服務器應該能夠處理所有。

我希望令牌能夠刷新,直到它在有限的時間內不再使用 - 就像會話一樣

這實際上沒有意義(在OAuth2上下文中)。 訪問令牌由授權服務器發出,授權服務器決定它的有效期。 它在資源服務器上“使用”,資源服務器可能與授權服務器完全分離,因此OAuth2中沒有任何工具可以將使用與令牌的生命周期連接起來。 從理論上講,可能會將某些東西混合在一起,這使得這項工作成為可能,但這聽起來不錯。

如果我可以竊取令牌,我也可以竊取刷新令牌。 所以我想我真的沒有看到首先有一個刷新令牌的重點..

訪問令牌被重復使用,並由客戶端發送到授權服務器以外的服務器。 刷新令牌由客戶端保留,僅發送回授權服務器。 客戶端還必須進行身份驗證才能成功使用刷新令牌,因此客戶端ID和密碼也必須被泄露。

從您的問題中可以清楚地知道為什么使用OAuth2。 您可能應該擴展您的問題以澄清這一點。 如果只有一個客戶端和一個REST服務器,為什么不通過HTTPS使用BASIC auth之類的東西呢?

此外,客戶端是基於瀏覽器的應用程序嗎? 如果是這樣,用戶名/密碼授予不適合在不受信任的客戶端中使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM