2

對於我正在開發的項目,我需要使用通用身份服務器創建兩個單獨的(但不完全不相關的)應用程序。我爲此選擇了IdentityServer4,它對我來說效果很好。Asp.Net核心/身份服務器複雜授權

但是,我需要能夠將用戶分配給多個公司/項目(是的,這是一個真實的案例),並可能分配給他們每個人的不同角色。但是,我無法爲此設計索賠結構。

我看到兩種方法可以解決這個問題;

  1. 爲每個公司/項目其中將包含companyId和用戶在該公司角色的複雜要求。這可能是JSON格式或自定義字符串,如companyGUID_roleClaim 但是,當我做了一個小的研究時,我意識到有很多人不認爲這是正確的方法,因爲他們認爲這些聲明應該是簡單的鍵 - 值對。

  2. 讓應用程序連接/查詢身份數據庫檢索公司/項目,並與活躍用戶關聯的角色和保護利用基於這些數據的政策資源。

也許我從錯誤的一面看它,或者這兩者中的一個是可以接受的。或者有另一種解決方案。你能幫我找到解決這個問題的辦法嗎?

回答

4

如果您打算使用第一種方法,您可能會遇到一些問題。您在聲明中指定的角色在您的兩個不完全不相關的應用程序中可能有不同的含義。

索賠代表用戶的身份,而不是他/她被允許訪問的內容。

你可以寫一個授權服務將從數據庫提供所需的授權數據。您可以通過編寫授權政策來授權這兩個應用程序。你可以用[Authorize(Policy="MyPolicy"]來裝飾它們來保護你的資源。

leastprivilege寫了一篇不錯的博客吧,爲什麼你不應該使用索賠權限: https://leastprivilege.com/2016/12/16/identity-vs-permissions/