集成 ASP.NET Identity 的最佳實踐——它們存在嗎?
我正在將 ASP.NET Identity 與一個新網站一起使用,但似乎沒有很多(任何?)範例說明如何以分離的方式執行此操作。我不希望我的域模型的
DomainUser類必須繼承自Microsoft.AspNet.Identity.EntityFramework.User,所以我創建了一個如下所示的類:public class IdentityUser : User { public virtual DomainUser DomainUser { get; private set; } }我已將
DbSetASP.NET Identity 所需的 s 移動到與DbContext我的域模型相同的派生類中,如本答案所示。我已經將IdentityUser單向連結到DomainUser通過 Fluent API,如下所示:modelBuilder.Entity<IdentityUser>().HasRequired(iu => iu.DomainUser).WithRequiredPrincipal();這使我能夠將授權和身份驗證的關注點與類中定義的行為分開
DomainUser。這比將它們組合成一個類要好,但仍然感覺很難看。我仍然在我的域項目中引用了所需的 ASP.NET 標識程序集。我可以創建另一個項目,它只包含我的 IdentityUser 類和對我的 Domain 程序集的引用以允許導航屬性,但這開始讓人感到復雜。我覺得應該有一種更好、更清潔、更模組化的方式將身份連結到域,而不會導致緊密耦合。
有沒有人想出更好的方法來處理這個問題?我希望引起參與 ASP.NET Identity 項目(Hao Kung等人)的人的注意,以便在這裡提供指導。
事實是,如果您要從 IdentityUser 繼承,ASP.NET Identity 相關程序集就會隨之而來。您不能將身份與 ASP.NET 分開。問題中的原始範例對您沒有太大幫助-在大多數情況下,
IdentityUser如果您要IdentityUser在域項目中使用,您最好只繼承自。如果您的域項目確實需要沒有與 ASP.NET 相關的程序集,那麼您可以將 Identity 相關的類留在您的 Web 項目中,並
User在您的域項目中創建一個單獨的模型,並以程式方式將兩者連結起來,如此處所建議的。
這裡有關於解耦 ASP.NET Identity 的討論。您可以在開源項目 SimpleSecurity中找到有關如何實現它的範例。