Best Practices für die Integration ASP.NET Identität - gibt es sie?
-
20-12-2019 - |
Frage
Ich benutze ASP.NET Identität mit einer neuen Website und es scheint nicht viele zu geben (irgendwelche?) beispiele, wie dies entkoppelt durchgeführt werden kann.Ich möchte meine Domain-Modelle nicht DomainUser
klasse, von der geerbt werden muss Microsoft.AspNet.Identity.EntityFramework.User
, also habe ich eine Klasse erstellt, die so aussieht:
public class IdentityUser : User
{
public virtual DomainUser DomainUser { get; private set; }
}
Ich habe das verschoben DbSet
s benötigt von ASP.NET Identität in die gleiche abgeleitete DbContext
klasse als meine Domänenmodelle wie in dieser Antwort dargestellt.Ich habe das verlinkt IdentityUser
unidirektional zum DomainUser
über fließende API wie folgt:
modelBuilder.Entity<IdentityUser>().HasRequired(iu => iu.DomainUser).WithRequiredPrincipal();
Dies ermöglicht es mir, die Bedenken der Autorisierung und Authentifizierung größtenteils von den im DomainUser
Klasse.Das ist besser, als sie zu einer Klasse zusammenzufassen, aber es fühlt sich immer noch hässlich an.Ich habe noch Hinweise auf die erforderlichen ASP.NET Identitätsassemblys in meinem Domänenprojekt.Ich könnte noch ein weiteres Projekt erstellen, das nur meine IdentityUser-Klasse und einen Verweis auf meine Domänenassembly enthält, um die Navigationseigenschaft zu ermöglichen, aber das fühlt sich kompliziert an.
Ich bin der Meinung, dass es eine bessere, sauberere und modularere Möglichkeit geben sollte, Identität mit der Domäne zu verknüpfen, ohne dass dies zu einer engen Kopplung führt.
Hat sich jemand einen besseren Weg ausgedacht, damit umzugehen?Ich hoffe, die Aufmerksamkeit der Beteiligten auf sich zu ziehen ASP.NET Identitätsprojekt (Hao Kung et al), um hier eine Richtung vorzugeben.
Lösung 2
Tatsache ist, dass, wenn Sie von IdentityUser erben werden, ASP.NET Identitätsbezogene Versammlungen kommen für die Fahrt mit.Sie können Identität nicht trennen von ASP.NET .Die ursprünglichen Beispiele in der Frage kaufen Ihnen nicht viel - in den meisten Fällen ist es wahrscheinlich besser, wenn Sie nur erben von IdentityUser
wenn Sie verwenden werden IdentityUser
in Ihrem Domain-Projekt.
Wenn Ihr Domain-Projekt wirklich frei von sein muss ASP.NET verwandte Assemblys Dann können Sie die identitätsbezogenen Klassen in Ihrem Webprojekt belassen und eine separate erstellen User
modellieren Sie in Ihrem Domänenprojekt eine Verknüpfung der beiden programmgesteuert, wie vorgeschlagen hier.
Andere Tipps
Es gibt eine diskussion über Entkopplung ASP.NET Identität hier.Und Sie können Beispiele dafür finden, wie es in der umgesetzt wird open Source Projekt SimpleSecurity.