簡體   English   中英

OAuth 2 - 如何定義動態資源授權?

[英]OAuth 2 - how to define dynamic resource authorization?

作為資源服務器,我想讓用戶更多地控制他們的資源。

例如,考慮我有一個支持 OAuth 2 的雲文件系統。

用戶可以代表他向客戶提供訪問文件的權限。

我希望資源服務器提供對特定文件夾的訪問,例如,只有照片而不是文檔。

文件夾的名稱是一種動態資源,因為它因用戶而異。

如何處理動態資源授權? 動態范圍?

此外,如果范圍是動態的,客戶端如何知道請求它?

* 在規范中找不到它:(

作為 OAuth 2.0 規范的文檔 rfc6749 定義了一種通過使用附加參數來擴展 OAuth 2 的方法(rfc6749#section-8.2)。 所以,如果你想用 OAuth 解決這個問題,你可以使用這種方法或類似的方法:

  • 您為授權請求定義一個新參數以指定資源(例如:folderID=XXXXX)
  • 在授權請求期間,客戶端可以使用新參數選擇性地指定資源
  • 如果指定了該參數,您的授權服務器將生成一個必須由資源所有者簽名的“動態范圍”
  • 如果不指定參數,Resource Owner可以選擇自己想要共享的資源,Authorization服務器可以生成相關的“動態范圍”(這個場景意味着在Authorization流程中資源服務器以某種方式參與)
  • 當范圍由資源所有者定義和簽名時,它們將傳達給客戶端(如果后者已由資源所有者定義,則它應該能夠從范圍派生資源 ID)
  • 當客戶端請求資源時,資源服務器還必須確保范圍包括請求的資源

請記住,如果每個用戶的資源量不是很大(否則您可能會被范圍淹沒),這種方法效果更好。

另一種方法是在 OAuth 層后面添加額外的授權層。 這個附加層跟蹤關系客戶端/可訪問資源。

就在最近,我不得不熟悉 OAuth/OIDC,現在我面臨着同樣的問題——這是我目前能想到的——

  • 您肯定有理由將安全性外部化(authN、authZ)——這就是您使用 OAuth 的原因。 你真的想讓你的授權服務器知道你在你的應用程序中擁有的資源嗎?
  • 作用域——據我所知——控制對 API 的訪問,而不是標准含義中的“資源”——即使我讀到了“資源”類型的作用域,但那些再次授予對 API 的訪問權限。
  • 如果您有想要控制訪問權限的資源(文件),最好在應用程序中處理它 - 如果必須,還可以選擇從身份驗證服務器請求已知客戶端的列表。

無論如何,這就是我要嘗試為我自己的應用程序執行此操作的方式 - 沒有在網上找到有關此的任何資源確實令人驚訝。

在這里復活一個很老的問題,但我認為這個問題仍然存在。

要記住的一個有用的細節是客戶端請求的范圍和資源所有者允許的范圍不必相等。 事實上,RO 允許的范圍甚至不必是請求范圍的子集。

在您的情況下,RO 允許的范圍可以是一組資源 URL,由 RO 在授權步驟根據請求的范圍選擇。 然后,通過查看訪問令牌中的值並理解它們的含義,資源服務器將能夠動態地為請求的資源提供服務。

暫無
暫無

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

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