Abstrahieren der asp.net mvc-Identität von der UI-Ebene

8

Ich baue eine neue MVC-Anwendung. Normalerweise habe ich immer eine Projektstruktur, die so aussieht:

  • DAL-Layer (Entitäten und Repositories
  • Service-Schicht (Business-orientierte Service-Aufrufe, die zwischen dem api / Frontend und der DAL koordinieren)
  • Frontend, dies kann eine Web-API oder eine MVC-Anwendung sein.

Mein Problem ist, dass ich immer eine chaotische Implementierung für die Benutzerverwaltung habe. Ich habe die Mitgliedschaftsanbieter benutzt und diesen Teil daher nicht so schön gemacht wie er sollte. Jetzt habe ich die neue Identity-Implementierung gesehen und es hat mir sehr gut gefallen. Ich habe einige Suchanfragen durchgeführt, um es zum Backend zu abstrahieren, aber ohne Ergebnis.

Ich fand diesen Beitrag über die Strukturierung des Projekts, aber es gab keine wirkliche Antwort: Entkoppeln von ASP.NET MVC 5 Identity, um das Implementieren einer mehrschichtigen Anwendung zu ermöglichen

Ich hatte gehofft, dass jemand mir ein paar Hinweise oder ein technisches Dokument liefern könnte, wie abstrakt alle Login und Authentifizierung für die Backend-Ebene sind.

    
Patrick 23.01.2014, 11:15
quelle

2 Antworten

4

Sie könnten in Ihrer Business-Schicht eine ziemlich einfache Schnittstelle erstellen. Es würde ungefähr so ​​aussehen:

%Vor%

Sie können diese Schnittstelle mithilfe von ASP.NET Identity entweder in der Business-Schicht, der UI-Ebene oder einer separaten Infrastruktur-Ebene implementieren.

Diese Schnittstelle könnte durch verschiedene Technologien implementiert werden, die zur Laufzeit von einem IoC-Container registriert werden können, und Sie könnten einfach die Schnittstelle in Ihrem AccountController zum Beispiel verwenden. Da sich Authentifizierungs-Frameworks häufig (jedes Jahr oder so) ändern, können Sie so leichter wechseln.

    
Henk Mollema 23.01.2014, 13:02
quelle
4

Technisch ist es bereits abstrahiert. Die UserManager -Klasse, die für ASP.NET Identity von zentraler Bedeutung ist, ist ein Wrapper für Ihren Datenbankkontext. Nun, wenn Sie davon sprechen, es weiter zu abstrahieren, so dass es in Ihrem Code überhaupt keinen Bezug zu ASP.NET Identity gibt, würde ich sagen, dass das unnötig, aber immer noch möglich ist. Sie können den gesamten Code einfach in Ihre Serviceebene verschieben und dann Anrufe an Ihren Dienst tätigen, um die entsprechenden Methoden für UserManager aufzurufen. Sie müssen Ihren Kontext jedoch trotzdem weitergeben, damit Sie nicht mehrere Instanzen davon erstellen, die Sie sicher beißen werden.

    
Chris Pratt 23.01.2014 14:07
quelle