2009-02-24 11 views
7

Ich habe einen Business-Logik-Layer (das "Repository"), der als eine Reihe von .NET-Schnittstellen verfügbar gemacht wird, die durch auslagerbare konkrete Implementierungen unterstützt werden.Sollte die Business-Logik-Ebene Autorisierung und Authentifizierung implementieren?

Ursprünglich hatte ich diese Business-Schicht implementieren Authentifizierung und Authenz (authn/authz), dh ich hatte Schnittstellen wie IUserIdentity und IUserRole, und alle Methoden, die auf sensible Daten zugegriffen, nahm eine IUserIdentity und führte Autorisierung vor dem Erlauben der Aktion.

Die Business-Schicht war bis jetzt sehr front-end-agnostisch ... aber jetzt, wenn ich versuche, in eine ASP.NET-Website zu integrieren, erkannte ich, dass ASP.NET selbst eine reiche Authentifizierung/Autorisierung hat System über die Mitgliedschafts- und Rollen-APIs integriert.

Die Frage ist also, sollte ich alle Authn/Authz aus der Business-Logik-Ebene entfernen und auf das Web-Frontend verlassen, um dies zu tun? Das würde die Dinge viel vereinfachen, aber ich weiß nicht, ob ich es später bereuen werde, es herauszuziehen.

Die Alternative ist, die Authn/Authz in meiner Geschäftslogik zu halten, aber integrieren Sie es mit ASP.NET über benutzerdefinierte Mitgliedschaft/Rolle Anbieter. Aber das scheint wirklich beschwerlich zu sein ... Ich muss immer noch die Kosten dafür untersuchen.

Was würden Sie tun (oder getan haben) und warum?

Antwort

5

Ich denke, Sicherheit ist eine Querschnittsaufgabe, die in Aspekten gehört. Ich weiß nicht, ob .NET Aspekte hat, es sei denn, Sie verwenden Spring.NET.

+0

Eigentlich (Entschuldigung, ich hätte das erwähnen sollen) Ich verwende ASP.NET MVC, die das Aspektkonzept für die Sicherheit über das Autorize-Attribut implementiert. – DSO

+0

Attribute in .NET sind wie Anmerkungen in Java EE, wenn ich mich richtig erinnere. Gibt es etwas wie die Ausdruckssprache von AspectJ, um einen Aspekt auf eine Reihe von Methoden, Klassen und Paketen anzuwenden? – duffymo

1

Halten Sie es. Die Formularauthentifizierung in ASP.NET ist sehr einfach anzupassen und Ihre Business-Logik-Ebene bleibt unabhängig vom Frontend.

Betrachten Sie weg von this approach bleiben und versuchen Sie stattdessen Forms Authentication. Grundsätzlich können Sie Ihre etablierten Methoden von einem Authenticate-Ereignis eines Login-Steuerelements aus aufrufen.

0

Planen Sie die Verwendung mehrerer Front-Ends (asp.net, winforms, mobile?) Oder die Bereitstellung der Business-Schicht über (Web-) Dienste? Dann sollten Sie wahrscheinlich die Authentifizierung oberhalb der Business-Schicht implementieren.

Wenn Sie nur den/denen Zugriff gewähren möchten, können Sie die integrierte Sicherheit für IIS verwenden und keinen benutzerdefinierten Code dafür erstellen.

Sie können auch in den asp.net-Mitgliedschaftsanbieter suchen.

1

Ich schlage vor, Sie behalten die vorhandene Logik, und schreiben Sie einen benutzerdefinierten Mitgliedschaft/Rollenanbieter um Ihre vorhandenen Sicherheitsklassen, wenn Sie die gleiche direkt mit asp.net verwenden möchten. Dies sollte einfacher sein als Sie denken.

http://www.codeproject.com/KB/aspnet/customaspnetproviders.aspx

Wie Sie bereits Klassen haben Sicherheitsberechtigungen für die Verwaltung, dies bedeutet nur, Ihre bestehende Logik wickeln.

Dies wird Ihnen auch helfen, später Ihre Sicherheitslogik zu verwenden, lassen Sie uns sagen, wenn Sie eine Winform-Client erstellen, die Ihre Business-Logik verbraucht, oder wenn Sie Ihre Geschäftslogik als Web-Services

0

ich die Rolle glauben aussetzen Based Security sollte in der Business-Schicht sein, wo CSLA es ausdrückt.

Verwandte Themen