2010-04-09 3 views
10

Kann dieser Rollenanbieter AspNetWindowsTokenRoleProvider mit ASP.NET FORMS Authentication (über diesen Mitgliedschaftsanbieter System.Web.Security.ActiveDirectoryMembershipProvider) verwendet werden?Wie kann ich ASP.NET Forms Authentication UX bereitstellen, während Active Directory-Rollen- und Authentifizierungsanbieter verwendet werden?

Es scheint nur mit <authentication mode="Windows"> zu arbeiten, ist es möglich, es mit FORMS zu verwenden?

Hintergrund - Ziel ist es, ASP.NET Forms UX bereitzustellen, während Active Directory als Back-End-Authentifizierungssystem verwendet wird. Wenn es eine andere, einfache Möglichkeit gibt, dies mit integrierten Technologien zu tun, ist das großartig, und davon würde ich auch gerne erfahren.

Update

Ich sollte sagen, dass ich die Authentifizierung Arbeits haben, was mit ich bin zu kämpfen ist ein Maß an granulare Kontrolle (zB Rollen) hinzufügen.

Zurzeit muss ich meine Active Directory-Verbindung so einrichten, dass sie auf eine bestimmte Organisationseinheit in meiner Domäne verweist, die den Zugriff auf nur Benutzer physisch in dieser Organisationseinheit einschränkt - ich möchte meine Active Directory-Verbindung auf meine verweisen gesamte Domain und Zugriff auf Gruppenmitgliedschaft beschränken (aka Rollen) funktioniert das, wenn ich Windows-Authentifizierung verwende - aber ich möchte das Beste aus beiden Welten haben, ist dies möglich, ohne meinen eigenen RoleProvider zu schreiben?

+0

Basierend auf Ihrem "Hintergrund" Absatz klingt es wie dieses Tutorial ist, was Sie brauchen: - http://msdn.microsoft.com/en-us/library/ms998360.aspx Es heißt "How to: Verwenden Sie Formularauthentifizierung mit Active Directory in ASP.NET 2.0 "Sorgen Sie sich nicht um das Element 2.0, wenn Sie eine neuere Version verwenden - es gibt nur die erforderliche Mindestversion an. – rtpHarry

Antwort

6

Wie andere erwähnt haben, können Sie die ActiveDirectoryMembershipProvider mit der AspNetWindowsTokenRoleProvider nicht verwenden. Wenn Sie die ADMP mit Formularauthentifizierung verwenden möchten, haben Sie ein paar Möglichkeiten:

  1. Verwenden Sie die AuthorizationManager aka AzMan. - AzMan ist in Windows 2003+ integriert und kann mit Active Directory-Gruppen interagieren. Darüber hinaus ist in .NET 2.0 + ein AuthorizationStoreRoleProvider integriert, mit dem Sie interagieren können. AzMan arbeitet an Aufgaben, Operationen und Rollen, bei denen vermutlich Ihre Anwendung so codiert ist, dass sie auf bestimmte Aufgaben eingeht, die dann in Operationen gruppiert werden können, und Sie können dann Rollen erstellen, die die Berechtigung zum Ausführen verschiedener Operationen besitzen. Bei der Installation von AzMan wird eine Verwaltungsanwendung installiert, mit der Sie Aufgaben, Vorgänge und Rollen verwalten können. Es gibt jedoch einige Nachteile für AzMan. Erstens erkennt AuthorizationStoreRoleProvider Tasks nicht. Stattdessen lädt es die Roles Liste mit einer Liste von Operationen. Wenn Sie keine benutzerdefinierte Version des Anbieters erstellen, müssen Ihre Anwendungen daher Vorgangsnamen anstelle von Vorgangsnamen suchen. Zweitens kann es ein Bär sein, mit dem in dieser Interaktion gearbeitet wird, auf der niedrigsten Ebene, immer noch über COM. Sofern Sie nicht möchten, dass Ihre Administratoren das AzMan-Tool verwenden müssen, müssen Sie Ihre eigenen Seiten schreiben, um Vorgänge, Rollen und die Mitgliedschaft in Rollen zu verwalten.

  2. Verwenden Sie den SqlRoleProvider und ordnen Sie den Benutzernamen Rollen zu. Der Vorteil dieser Lösung ist, dass sie sehr einfach zu implementieren ist. Sie können es praktisch sofort verwenden, da der RoleProvider mit Benutzername und nicht mit UserId arbeitet. In Ihrem Code würden Sie einfach nach IsInRole suchen, um festzustellen, ob der angegebene Benutzer in eine Rolle fallen gelassen wurde, die Ihr Code erkennt. Der wesentliche Nachteil besteht darin, dass es nur auf Nutzernamen und nicht auf AD-Gruppen ausgerichtet ist und somit kein Administrator die AD-Tools zum Verwalten von Benutzern verwenden kann.Stattdessen müssen Sie eine Verwaltungskonsole schreiben, um die Rollenmitgliedschaft zu verwalten. Darüber hinaus würde das Ändern eines Benutzernamens auf AD-Ebene eine Aktualisierung der Liste mit bekannten Benutzernamen Ihrer Anwendung erfordern.

  3. Schreiben Sie (oder suchen Sie) einen benutzerdefinierten AD-Rollenprovider, der AD-Gruppen berücksichtigt. Das Schreiben eines benutzerdefinierten Rollenanbieters ist nichts für schwache Nerven, aber Administratoren können die Rollenmitgliedschaft mithilfe ihrer vorhandenen AD-Tools verwalten.

0

Ja, Sie haben recht; Es funktioniert nur mit Windows-Formularauthentifizierung. Sie können es hier bestätigen: http://msdn.microsoft.com/en-us/library/system.web.security.windowstokenroleprovider.aspx

Nur ein Vorschlag. Probieren Sie AuthorizationStoreRoleProvider mit AzMan (Authorization Manager). Es funktionierte für mich (vor Ewigkeiten, also erinnere ich mich nicht viel).

+0

Ist AzMan eingebaut? Oder ist es ein neuer/zusätzlicher Download/Installation? Wenn ja, wo? – Nate

+0

Der "Authorization Manager" wird mit Windows Server geliefert. Importieren Sie einfach seine DLLs in Ihr Projekt und Sie können loslegen. :) –

+0

Überprüfen Sie diese URL: http://msdn.microsoft.com/en-us/library/ms998336.aspx Es erklärt den gesamten Prozess, seit der AzMan-Installation. –

2

Implementieren Sie Ihre eigenen ADAuthorizeAttribute durch von AuthorizeAttribute und überwiegenden AuthorizeCore vererben. Es ist viel einfacher als die Implementierung Ihres eigenen Rollenanbieters oder die Installation und Konfiguration von AzMan.

Siehe mein Beispiel hier: ASP .NET MVC Forms authorization with Active Directory groups.

Verwandte Themen