2016-09-22 47 views
0

我計劃在ASP.NET Core上使用IdentityServer 4作爲數據存儲。這是我第一次使用中央認證/授權,我想知道如何解決以下問題:IdentityServer 4和特定於作用域的用戶設置

假設我的用戶擁有類似名稱,角色等聲明和允許這些用戶的Web API(範圍)從硬件設備訪問測量值。 IdentityServer將允許我對已知用戶進行身份驗證,但現在我需要一個訪問控制,以瞭解哪些用戶可以訪問哪些設備數據。

我在哪裏存儲這些信息?由於它是特定於範圍,我猜它不應該存儲在IdentityServers存儲中。另一方面,如果我將它存儲在作用域自己的數據庫中,我需要將它連接到IdentityServers存儲中定義的用戶。我應該定義對所有範圍和IdentityServer唯一的用戶ID嗎?

回答

1

您需要關聯IdentiyServer返回的用戶ID和範圍數據庫中定義的用戶。

我相信有一個用戶表和一個用戶登錄表,您可以在其中跟蹤每個用戶的不同登錄信息。

然後,在範圍的數據庫中,您可以指定哪些用戶有權訪問哪些設備數據。

1

這是一個壞主意,可能會導致你失去一條你不應該走的道路。

這意味着您的客戶端應用程序請求作用域需要知道哪個用戶有權訪問哪個作用域,甚至在向您的IDP請求令牌之前(否則您的令牌請求將不起作用)。而是將其作爲用戶聲明進行建模。然後在您的WebApi上,您可以執行正常的基於聲明的授權。

+0

感謝您的回答,並對延誤表示歉意。我不太明白你描述的問題。我認爲它會像這樣工作:用戶將瀏​​覽器指向登錄頁面並輸入其憑據。登錄頁面使用IdentityServer對用戶進行身份驗證,取回令牌並將其重定向到起始頁面。起始頁面使用WebApi(傳遞令牌)枚舉所有可訪問的設備。這個概念有什麼問題嗎? – NicolasR

+1

有一點,範圍是定義客戶可能想要訪問的資源的索賠,而不是用戶。 「我需要知道哪些用戶可以訪問哪些設備數據的訪問控制」(據我所知)轉換爲基於資源的認證問題。您想根據資源執行訪問控制(在這種情況下,資源是設備數據) 基於資源的身份驗證的官方文檔: https://docs.asp.net/en/latest/security/authorization/resourcebased .html 寫了一篇關於它的博客: http://lutando.net/2016/10/authorization-assertions-on-resources-in-asp-net-core/ – Lutando

+0

很棒的博客文章!我必須考慮這一點。在較早和較簡單的實現中,我們使用ASP.NET身份並創建了與設備關聯的角色(組)。允許屬於某個組的用戶查看關聯設備的數據。但在那裏很容易,因爲用戶,角色和設備定義都在數據庫中。 – NicolasR