8

所以我們的組織正在開發一些新的Web應用程序使用asp.net mvc和web api。我們決定不使用活動目錄進行身份驗證/授權,所以它看起來像使用實體框架的asp.net標識可能會起作用。ASP.NET身份與多個應用程序

查看數據庫架構我沒有看到應用程序表,因此我們可以擁有一個用於用戶憑據和應用程序訪問的中央存儲庫。這是索賠進來的地方嗎?那看起來怎麼樣;用戶 - >應用程序 - >角色 - >權限

另外,我們的目標之一是也爲用戶提供單點登錄。這對新的持票人代幣有可能嗎?

感謝您的幫助,您可以提供

+0

是您固定或動態的角色。就像最終用戶可以在運行時更改角色一樣,或者每個角色在開發階段擁有固定的權限。 – 2015-04-05 15:57:58

回答

7

看看這個教程。它展示瞭如何使用Web API來實現ASP.NET身份:

http://bitoftech.net/2015/01/21/asp-net-identity-2-with-asp-net-web-api-2-accounts-management/

至於對付多個應用程序。浮現在腦海中有兩種方法:

  1. 追加的AppId到所有的用戶名
  2. 添加AppIdAspNetUsers表,從UserStore並從中獲得重新實施Find爲基礎的方法,以便查詢顧及AppId

對於#1,當應用程序想創建一個新用戶時,它會向WebApi發送一個包含新用戶信息和AppId的請求。 WebApi會連接UserNameAppId以創建將寫入數據庫的完整用戶名。因此,如果應用程序1234想要使用用戶名myuser創建用戶,那麼WebApi將創建一個用戶名爲myuser_1234的新用戶。從查詢數據庫的那一刻起,您將首先從請求中獲取UserNameAppId,然後連接它們,然後查詢數據庫。

如果另一個應用程序9900想要創建一個myuser,那麼寫入數據庫的最終用戶名將是myuser_9900

您可能希望將應用程序詳細信息存儲在數據庫中,並且對於每個請求都會驗證AppId以確保您在處理其請求之前識別應用程序。

我沒有想太多步驟#2,所以它只是一個建議。

如果您想要跨多個應用程序共享用戶憑據,那麼您可能會忽略上述內容,使用標準功能並且只讓所有應用程序指向相同的數據庫,因此允許所有應用程序訪問所有用戶,而不管哪個應用程序創建了哪個用戶。

更新#1:在這種情況下可以使用承載令牌,我認爲(從內存中)上述教程系列涉及到這一點以及單個WebApi如何爲多個應用程序提供令牌。

+0

我試圖通過兩個不同的應用程序在兩個不同的子域上共享憑據,因此它們運行在兩個不同的應用程序池上,並且無法使用另一個Web應用程序創建的憑據登錄。這兩個應用程序的密碼似乎有不同的散列,因此驗證失敗。 – Giox 2017-02-23 21:18:34

2

你的用戶及其證書存儲在AspNetUser不同的會話狀態表和角色在ASPNetRoleAspNetUserRole作爲兩者之間的聯結表來映射用戶和角色。您可以通過在應用程序中共享這些表來實現SSO(單點登錄)。就像每個應用程序需要讀取這些表和角色以及登錄用戶一樣。但更好的方法是創建一箇中央WebApi來處理用戶身份驗證和授權。

此外,如果你可以在運行時更改角色,那麼你有權限的想法,你可以創建一個自定義表來存儲權限,然後將角色映射到權限。當用戶登錄時只需加載所有權限並存儲爲聲明。您可以序列化整個角色(使用其權限列表)並將其存儲爲一個聲明。或將每項權限存儲爲個人聲明,以最適合您的爲準。

相關問題