Asp.net-Core

IdentityServer4 + Asp.Net Core Identity - 將身份映射到應用程序數據庫使用者

  • August 4, 2020

我正在嘗試使用 Asp.Net Core Identity 實現 IdentityServer4。我想將 IdentityServer4 用作始終使用相同身份的 API 的集中式身份驗證/授權點。所以這個想法是將 Asp.Net Core Identity 的東西儲存在一個 SQL 數據庫中,作為身份儲存。

現在的問題是如何將集中身份映射到應用程序特定數據。我想在多個應用程序中使用相同的身份使用者,但在每個應用程序中,使用者都有其他相關的實體、角色等。

我通讀了 IdentityServer4 的文件,但找不到與提議的結構相關的任何內容。

據我了解,您以某種方式將身份標識映射到您的本地應用程序使用者。名字等基本數據儲存在集中式身份儲存中,應用程序特定數據儲存在應用程序特定數據庫中。所以你不會在應用程序特定的數據庫中保存名字等,對吧?在您需要使用者特定數據的每個請求中,將查詢身份伺服器以獲取資訊/聲明?註冊流程是怎樣的?

有沒有人有一個清晰的結構設置可以用來理解整個設置?(如 Asp.Net Identity Provider、IdentityServer4、Protected Api 之類的分離。)

所以你不會在應用程序特定的數據庫中保存名字等,對吧?

是的,使用者特定的屬性應該進入使用者配置文件,並且應該保存在 IdentityServer 的使用者儲存(數據庫)中。應用程序特定的使用者數據應儲存在應用程序商店中。

在您需要使用者特定數據的每個請求中,將查詢身份伺服器以獲取資訊/聲明?

不一定,使用者特定數據可以作為聲明包含在身份令牌中。然後,聲明將作為身份驗證票證儲存在 cookie 中。對於每個請求,這些聲明(儲存在 cookie/s 中)可通過控制器的 User 屬性獲得

var identity = (ClaimsIdentity)User.Identity;
IEnumerable<Claim> claims = identity.Claims;

您可以根據使用者 ID 儲存和查詢與應用程序相關的使用者數據(sub聲明可以用作使用者 ID)。

如果您在應用程序中需要大量特定於使用者的數據,那麼將所有內容都包含在身份令牌中並不是最佳選擇,而且您不太可能需要為每個請求提供這些數據。因此,當您需要額外資訊時,您可以查詢身份伺服器的 UserInfo 端點。只需在身份令牌中包含辨識使用者所需的基本資訊。

註冊流程是怎樣的?

註冊是一個完全獨立的工作流程,不涉及身份伺服器。您只需要將使用者保存到身份儲存(可能使用 asp.net 身份)。當然,您可以將註冊控制器與身份伺服器一起託管,以便與身份相關的內容在物理上位於同一台伺服器上。您也可以從託管註冊過程的任何地方寫入 IdentityServer 使用者儲存(例如,單獨的管理 UI,或來自涉及電子郵件驗證、手動批准等的工作流程……)

引用自:https://stackoverflow.com/questions/46037909