Authentifizierungs -, Berechtigungs -, Benutzer-und Rollen-Management und Allgemeine Sicherheit .NET
Ich muss wissen, wie man über die Umsetzung der Allgemeinen Sicherheit für eine C# - Anwendung. Welche Möglichkeiten habe ich diesbezüglich? Ich würde es bevorzugen, verwenden Sie einen vorhandenen Rahmen, wenn es meine Anforderungen erfüllt - ich will nicht das Rad neu zu erfinden.
Meine Anforderungen sind wie folgt:
- der gewohnten Benutzername/Kennwort-Authentifizierung
- verwalten von Benutzern - zuweisen von Berechtigungen zu Benutzern
- Verwaltung von Rollen - zuweisen von Benutzern zu Rollen, zuweisen von Berechtigungen zu Rollen
- Autorisierung von Benutzern basierend auf Ihren Benutzernamen und Rolle
Ich bin auf der Suche nach einer kostenlosen /open-source-framework/Bibliothek, wurde Zeit-tesed und genutzt durch die .Netz-community.
Meine Applikation ist eine client/server-Ansatz, bei dem die server als windows-Dienst ausgeführt, eine Verbindung zu einer SQL Server-Datenbank. Die Kommunikation zwischen client und server wird durch WCF.
Eine andere Sache, die wichtig ist, ist, dass ich im Stande sein müssen, weisen Sie bestimmten Benutzern oder Rollen Berechtigungen zum Anzeigen/Aktualisieren/Löschen einer bestimmten Person, sei es ein Kunde oder Produkt usw. Für z.B. Jack können eine bestimmte 3 von 10 Kunden, sondern nur aktualisieren Sie die details des Kunden Microsoft, Yahoo und Google, und kann nur löschen Yahoo.
- Möchte nur sicherstellen, dass Sie wissen: C# ist die Sprache. Es muss nicht Sicherheit. .NET ist die Plattform. Es ist, wo die Sicherheit ist.
- Thnx John - ich verstehe den Unterschied.
- Entweder Sie können sich verlängern Asp.net die Mitgliedschaft, oder Sie können bereit, um plug-framework - VisualGuard - visual-guard.com/EN/-source_soforum.html
- Sie können versuchen, Casbin.NET: github.com/casbin/Casbin.NET
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für grobe Sicherheit, finden Sie vielleicht die eingebaute principal-code nützlich; das user-Objekt (und Ihre Rollen) gesteuert werden .NET durch die "AUFTRAGGEBER", sondern sinnvoll die Laufzeit selbst kann dies durchzusetzen.
Die Umsetzung eines Auftraggebers kann durch die Implementierung festgelegt, und Sie können in der Regel Spritzen Sie Ihre eigenen; zum Beispiel in WCF.
Sehen die Laufzeitumgebung Durchsetzung der grob-Zugang (d.h. die Funktionalität zugegriffen werden kann, aber nicht begrenzt auf die bestimmten Daten):
Dies bedeutet jedoch nicht, helfen Sie mit dem fine-grained access (D. H. "Fred zugreifen können Kunden aber nicht Kunde B").
Zusätzliche; natürlich, für feinkörnige, können Sie einfach aktivieren Sie die gewünschten Rollen zur Laufzeit, durch die überprüfung
IsInRole
auf dem AUFTRAGGEBER:Können Sie auch schreiben Sie Ihre eigenen AUFTRAGGEBER /Identität Gegenständen, die nicht faul tests /Zwischenspeicherung der Rollen, anstatt zu wissen, Sie alle up-front:
Blick in ASP.NET die Mitgliedschaft Anbieter. Ich glaube nicht, dass die out-of-box SQLMembershipProvider in Ihrem Fall, aber es ist leicht genug, um roll Ihre eigenen Anbieter.
meine Antwort ist wohl abhängig von der Antwort auf diese Frage: Ist das eine Enterprise-Anwendung, die lebt in einem Netzwerk mit Active Directory?
WENN die Antwort ja ist, dann sind die Schritte, die ich zu bieten hätte:
1) Erstellen Sie Globale Gruppen für Ihre Anwendung, in meinem Fall hatte ich die APPUSER-Gruppe und eine APPADMIN-Gruppe.
2) Haben Sie Ihre SQL Server in der Lage sein, auf die zugegriffen werden im GEMISCHTEN Authentifizierungsmodus aus, und weisen Sie Ihre APPUSER Gruppe(N) als SQL SERVER-ANMELDUNG, um Ihre Datenbank mit den entsprechenden CRUD-Rechte auf die DB(s) und stellen Sie sicher, dass Sie Zugriff auf den SQL-SERVER mit Trusted Connection = True in Ihrer Verbindungszeichenfolge.
An dieser Stelle Ihre ANZEIGE zu speichern wird verantwortlich sein für die Authentifizierung. Da, greifen Sie auf die Anwendung, die über eine VERTRAUENSWÜRDIGE VERBINDUNG, es wird passieren, die Identität von welchem Konto die Anwendung ausgeführt wird, die SQL Server.
Nun, für die AUTORISIERUNG (D. H. erzählt Ihre Anwendung, was der angemeldete Benutzer berechtigt ist, zu tun) es ist einfach eine Frage der Abfrage anzeigen für eine Liste der Gruppen, denen der angemeldete Benutzer Mitglied ist. Überprüfen Sie dann für die entsprechenden Gruppen-Namen und Aufbau der Benutzeroberfläche-basierend auf der Mitgliedschaft auf diese Weise.
Den Weg meine Anwendungen arbeiten sind daher:
Dann habe ich entweder ein PRINZIP-Objekt mit den ermittelten Rechte/usw auf, oder ich nutze GLOBALE Variablen, auf die ich zugreifen kann, um zu bestimmen, die entsprechenden UI während dem Aufbau meiner Formen (D. H., wenn mein Benutzer ist nicht Mitglied der ADMIN-Gruppe ist, dann würde ich alle ausblenden die Schaltflächen zum LÖSCHEN).
Warum ich schlage vor, diese?
Ist es eine Frage der Bereitstellung.
Es ist meine Erfahrung, dass die meisten Enterprise-Anwendungen bereitgestellt werden, die Netzwerk-Ingenieure eher als Programmierer-also, dass die Authentifizierung/Autorisierung, um die Zuständigkeit der AD macht Sinn, denn das ist, wo die Netzwerk-Jungs gehen, wenn Sie besprechen, Authentifizierung/Autorisierung.
Darüber hinaus bei der Erstellung neuer Nutzer für das Netzwerk, einen Netzwerk-Techniker (oder wer auch immer verantwortlich ist für die Erstellung von neuen Benutzern im Netzwerk) ist mehr apt zu erinnern, ausführen, group assignments, während Sie IN der AD, als die Tatsache, dass Sie gehen in ein Dutzend Anwendungen zu analysieren Zuweisungen der Genehmigung.
Tun, das hilft mit das Labyrinth der Berechtigungen und Rechte, die Neueinstellungen gewährt werden müssen, oder diejenigen, die das Unternehmen verlassen müssen verweigert werden und es behält die Authentifizierung und Autorisierung in das zentrale repository, wo es hingehört (also in der AD@, die Domain-Controller-Ebene).
Ich würde werfen Sie einen Blick auf so etwas wie CSLA.net: Experte C# 2008 Business Objects
Sollte es alles bieten, was Sie benötigen.
WCF haben reiche sicherheitsrelevante Funktionalität bietet sowohl die Autorisierung und die Authentifizierung.
Details hier:
http://msdn.microsoft.com/en-us/library/ms735093.aspx
Ich denke, Sie sind Blick auf eine paar separate Probleme hier-es ist kein Zufall, die meisten Sicherheits-Systeme separate Authentifizierung und Autorisierung.
Für die Authentifizierung, die größere Frage ist Logistische. Oder, ist es eine logische Ort für diese Benutzer, um zu Leben, werden Sie lokal auf die Anwendung in Active Directory, einige andere LDAP-store oder sogar in eine andere Anwendung. Wo genau ist ziemlich unerheblich-wir müssen nur in der Lage sein, die solide ist, die Benutzer zu identifizieren und möglichst zu machen, dass diese Aufgabe jemand anderes problem. Ende des Tages, Sie wirklich brauchen nur eine eindeutige Kennung und den Komfort, den Bob aus der Buchhaltung ist eigentlich Bob aus der Buchhaltung.
Autorisierung ist der interessanteste Teil des Problems hier. Ich denke, wenn es wirklich fein ist, Sie wirklich wollen, um diese vollständig in Ihre Anwendung, egal wo die Nutzer herkommen. Marc Gravell wirklich auf eine gute Art und Weise zu modellieren, zumindest einige dieser--verwenden Sie eine benutzerdefinierte Implementierung der IPrincipal-und PrincipalPermission-Verwaltung ist eine sehr saubere Art und Weise, begonnen zu erhalten. Darüber hinaus können Sie verwenden Techniken wie diese eine, um mehr komplexe autorisierungsentscheidungen in einem eher sauberen Art und Weise.
Ich würde den Begriff - 'RBAC' (Role based Access Control system) als Lösung für alle Ihre Anforderungen.
Ich würde nicht in viel detail erklärt "RBAC" hier, lieber würde ich kurz beschreiben, wie es zu:
Es enthält im Grunde 3 Funktionen.
1) - Authentifizierung bestätigt die Identität des Benutzers. In der Regel ist es erfolgt über Benutzerkonten und Kennwörter oder Anmeldeinformationen.
2) Berechtigung - Es wird definiert, was der Benutzer tun kann und nicht tun kann, in einer Anwendung. Ex. 'Ändern, um' ist erlaubt, aber 'creating new order" ist nicht erlaubt.
3) Überwachung von Aktionen eines Benutzers auf Anwendungen. - Es verfolgt die Benutzer Aktionen auf Anwendungen, sowie die erteilt hat, die den Zugriff auf die Benutzer?
können Sie überprüfen, RBAC bei wiki hier.
https://en.wikipedia.org/wiki/Role-based_access_control
Nun, in Bezug auf die Antwort auf Ihre Anforderungen - eine mögliche Lösung ist, um zu verlängern ASP.NET Mitgliedschaft nach Ihren Bedürfnissen.
Sowie über, einige ready to use Rahmen , würde ich empfehlen,VisualGuard, für die ich arbeite, sollten Sie diese, Sie tut all die Dinge, was Sie brauchen, sehr einfach, und, was am wichtigsten ist, Es verwaltet alle Benutzer, Rollen, Berechtigungen und Anwendungen werden über eine zentrale Verwaltungskonsole, und für die Definition von Berechtigungen, die Administratoren benötigen keine Entwickler wissen, ich.e er/Sie kann zu Beschränkungen auf Tätigkeiten über die Benutzeroberfläche.
können Sie auch Lesen Sie diesen Artikel, um mehr Verständnis über die Berechtigung und die Rolle basierten system.
http://www.visual-guard.com/EN/net-powerbuilder-application-security-authentication-permission-access-control-rbac-articles/dotnet-security-article-ressources/role-based-access-control-source_soforum.html