Konfigurieren einer Website mit Anwendungsdiensten (C#)
von Scott Mitchell
Hinweis
Seit diesem Artikel wurden die ASP.NET-Mitgliedschaftsanbieter von ASP.NET Identity abgelöst. Es wird dringend empfohlen, Apps so zu aktualisieren, dass sie die ASP.NET Identity-Plattform anstelle der Mitgliedschaftsanbieter verwenden, die zum Zeitpunkt des Schreibens dieses Artikels vorgestellt wurden. ASP.NET Identity bietet eine Reihe von Vorteilen gegenüber dem ASP.NET Mitgliedschaftssystem, darunter:
- Bessere Leistung
- Verbesserte Erweiterbarkeit und Testbarkeit
- Unterstützung für OAuth, OpenID Connect und zweistufige Authentifizierung
- Unterstützung der anspruchsbasierten Identität
- Bessere Interoperabilität mit ASP.Net Core
ASP.NET Version 2.0 wurde eine Reihe von Anwendungsdiensten eingeführt, die Teil der .NET Framework sind und als Eine Suite von Bausteindiensten dienen, mit denen Sie Ihrer Webanwendung umfangreiche Funktionen hinzufügen können. In diesem Tutorial wird erläutert, wie Sie eine Website in der Produktionsumgebung für die Verwendung von Anwendungsdiensten konfigurieren und häufige Probleme beim Verwalten von Benutzerkonten und Rollen in der Produktionsumgebung behandeln.
Einführung
ASP.NET Version 2.0 wurde eine Reihe von Anwendungsdiensten eingeführt, die Teil der .NET Framework sind und als Eine Suite von Bausteindiensten dienen, mit denen Sie Ihrer Webanwendung umfangreiche Funktionen hinzufügen können. Zu den Anwendungsdiensten gehören:
- Mitgliedschaft – eine API zum Erstellen und Verwalten von Benutzerkonten.
- Rollen : eine API zum Kategorisieren von Benutzern in Gruppen.
- Profil : eine API zum Speichern benutzerdefinierter, benutzerspezifischer Inhalte.
- Site Map : Eine API zum Definieren der logischen Struktur einer Website in Form einer Hierarchie, die dann über Navigationssteuerelemente wie Menüs und Breadcrumbs angezeigt werden kann.
- Personalisierung : Eine API zum Verwalten von Anpassungseinstellungen, die am häufigsten mit WebParts verwendet wird.
- Integritätsüberwachung : Eine API zum Überwachen von Leistung, Sicherheit, Fehlern und anderen Systemintegritätsmetriken für eine ausgeführte Webanwendung.
Die Anwendungsdienst-APIs sind nicht an eine bestimmte Implementierung gebunden. Stattdessen weisen Sie die Anwendungsdienste an, einen bestimmten Anbieter zu verwenden, und dieser Anbieter implementiert den Dienst mithilfe einer bestimmten Technologie. Die am häufigsten verwendeten Anbieter für internetbasierte Webanwendungen, die bei einem Webhostingunternehmen gehostet werden, sind die Anbieter, die eine SQL Server Datenbankimplementierung verwenden. Beispielsweise ist der SqlMembershipProvider
ein Anbieter für die Mitgliedschafts-API, der Benutzerkontoinformationen in einer Microsoft SQL Server-Datenbank speichert.
Die Verwendung der Anwendungsdienste und SQL Server-Anbieter bringt einige Herausforderungen bei der Bereitstellung der Anwendung mit sich. Zunächst müssen die Anwendungsdienste-Datenbankobjekte ordnungsgemäß für die Entwicklungs- und Produktionsdatenbanken erstellt und entsprechend initialisiert werden. Es gibt auch wichtige Konfigurationseinstellungen, die vorgenommen werden müssen.
Hinweis
Die Anwendungsdienste-APIs wurden mithilfe des Anbietermodells entworfen, einem Entwurfsmuster, das es ermöglicht, dass implementierungsdetails einer API zur Laufzeit bereitgestellt werden können. Die .NET Framework mit einer Reihe von Anwendungsdienstanbietern ausgeliefert, die verwendet werden können, zSqlMembershipProvider
. B. und SqlRoleProvider
, die Anbieter für die Mitgliedschafts- und Rollen-APIs sind, die eine SQL Server Datenbankimplementierung verwenden. Sie können auch einen benutzerdefinierten Anbieter erstellen und hinzufügen. Tatsächlich enthält die Book Reviews-Webanwendung bereits einen benutzerdefinierten Anbieter für die Site Map-API (ReviewSiteMapProvider
), der die Websiteübersicht aus den Daten in den Genres
Tabellen und Books
in der Datenbank erstellt.
Dieses Tutorial beginnt mit einem Blick darauf, wie ich die Book Reviews-Webanwendung erweitert habe, um die Mitgliedschafts- und Rollen-APIs zu verwenden. Anschließend wird die Bereitstellung einer Webanwendung beschrieben, die Anwendungsdienste mit einer SQL Server Datenbankimplementierung verwendet, und abschließend werden häufige Probleme beim Verwalten von Benutzerkonten und Rollen in der Produktionsumgebung behandelt.
Updates zur Anwendung "Buchbewertungen"
In den letzten Tutorials wurde die Book Reviews-Webanwendung von einer statischen Website zu einer dynamischen, datengesteuerten Webanwendung mit einer Reihe von Verwaltungsseiten zum Verwalten von Genres und Rezensionen aktualisiert. Dieser Verwaltungsabschnitt ist jedoch derzeit nicht geschützt . Jeder Benutzer, der die Verwaltungsseiten-URL kennt (oder erraten), kann Bewertungen auf unserer Website einwalzen und erstellen, bearbeiten oder löschen. Eine gängige Methode zum Schutz bestimmter Teile einer Website besteht darin, Benutzerkonten zu implementieren und dann URL-Autorisierungsregeln zu verwenden, um den Zugriff auf bestimmte Benutzer oder Rollen zu beschränken. Die in diesem Tutorial zum Download verfügbare Webanwendung Buchbewertungen unterstützt Benutzerkonten und Rollen. Es ist eine einzelne Rolle mit dem Namen Admin definiert, und nur Benutzer in dieser Rolle können auf die Verwaltungsseiten zugreifen.
Hinweis
Ich habe drei Benutzerkonten in der Book Reviews-Webanwendung erstellt: Scott, Jisun und Alice. Alle drei Benutzer haben dasselbe Kennwort: Kennwort! Scott und Jisun sind in der Admin Rolle, Alice nicht. Die Nicht-Verwaltungsseiten der Website sind weiterhin für anonyme Benutzer zugänglich. Das heißt, Sie müssen sich nicht anmelden, um die Website zu besuchen, es sei denn, Sie möchten sie verwalten. In diesem Fall müssen Sie sich als Benutzer in der rolle Admin anmelden.
Die Master-Seite der Buchüberprüfungen-Anwendung wurde aktualisiert, um eine andere Benutzeroberfläche für authentifizierte und anonyme Benutzer zu enthalten. Wenn ein anonymer Benutzer die Website besucht, wird in der oberen rechten Ecke ein Anmeldelink angezeigt. Ein authentifizierter Benutzer sieht die Meldung "Willkommen zurück, Benutzername!" und einen Link zum Abmelden. Es gibt auch eine Anmeldeseite (~/Login.aspx
), die ein Anmeldewebsteuerelement enthält, das die Benutzeroberfläche und Logik für die Authentifizierung eines Besuchers bereitstellt. Nur Administratoren können neue Konten erstellen. (Es gibt Seiten zum Erstellen und Verwalten von Benutzerkonten im ~/Admin
Ordner.)
Konfigurieren der Mitgliedschafts- und Rollen-APIs
Die Webanwendung "Buchüberprüfungen" verwendet die APIs "Mitgliedschaft" und "Rollen", um Benutzerkonten zu unterstützen und diese Benutzer in Rollen zu gruppieren (nämlich die rolle Admin). Die SqlMembershipProvider
Anbieterklassen und SqlRoleProvider
werden verwendet, da Konto- und Rolleninformationen in einer SQL Server Datenbank gespeichert werden sollen.
Hinweis
Dieses Tutorial soll keine detaillierte Prüfung zum Konfigurieren einer Webanwendung zur Unterstützung der Mitgliedschafts- und Rollen-APIs sein. Für einen ausführlichen Einblick in diese APIs und die Schritte, die Sie zum Konfigurieren einer Website für ihre Verwendung ausführen müssen, lesen Sie meine Tutorials zur Websitesicherheit.
Um die Anwendungsdienste mit einer SQL Server Datenbank zu verwenden, müssen Sie zuerst die von diesen Anbietern verwendeten Datenbankobjekte der Datenbank hinzufügen, in der das Benutzerkonto und die Rolleninformationen gespeichert werden sollen. Diese erforderlichen Datenbankobjekte umfassen eine Vielzahl von Tabellen, Ansichten und gespeicherten Prozeduren. Sofern nicht anders angegeben, verwenden die SqlMembershipProvider
Anbieterklassen und SqlRoleProvider
eine SQL Server Express Edition-Datenbank mit dem Namen ASPNETDB
im Ordner der AnwendungApp_Data
. Wenn eine solche Datenbank nicht vorhanden ist, wird sie automatisch mit den erforderlichen Datenbankobjekten von diesen Anbietern zur Laufzeit erstellt.
Es ist möglich und in der Regel ideal, die Anwendungsdienste-Datenbankobjekte in derselben Datenbank zu erstellen, in der die anwendungsspezifischen Daten der Website gespeichert sind. Die .NET Framework wird mit einem Tool namens ausgeliefertaspnet_regsql.exe
, das die Datenbankobjekte in einer angegebenen Datenbank installiert. Ich habe dieses Tool verwendet, um diese Objekte der Reviews.mdf
Datenbank im App_Data
Ordner (der Entwicklungsdatenbank) hinzuzufügen. Wir erfahren, wie Sie dieses Tool weiter unten in diesem Tutorial verwenden, wenn wir diese Objekte zur Produktionsdatenbank hinzufügen.
Wenn Sie die Anwendungsdienste-Datenbankobjekte einer anderen ASPNETDB
Datenbank hinzufügen, müssen Sie die Konfigurationen der SqlMembershipProvider
Anbieterklasse und SqlRoleProvider
anpassen, damit sie die entsprechende Datenbank verwenden. Um den Mitgliedschaftsanbieter anzupassen, fügen Sie ein <Mitgliedschaftselement> innerhalb des <system.web>
Abschnitts in hinzuWeb.config
. Verwenden Sie das <roleManager-Element>, um den Rollenanbieter zu konfigurieren. Der folgende Codeausschnitt stammt aus den Book Reviews-Anwendungen Web.config
und zeigt die Konfigurationseinstellungen für die Mitgliedschafts- und Rollen-APIs an. Beachten Sie, dass beide einen neuen Anbieter - ReviewMembership
und ReviewRole
- registrieren, die die SqlMembershipProvider
Anbieter und SqlRoleProvider
verwenden.
<configuration>
<system.web>
...
<membership defaultProvider="ReviewMembership">
<providers>
<clear />
<add type="System.Web.Security.SqlMembershipProvider"
name="ReviewMembership"
connectionStringName="ReviewsConnectionString"
applicationName="BookReviews" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="ReviewRole">
<providers>
<clear />
<add type="System.Web.Security.SqlRoleProvider"
name="ReviewRole"
connectionStringName="ReviewsConnectionString"
applicationName="BookReviews" />
</providers>
</roleManager>
...
</system.web>
</configuration>
Das Web.config
Dateielement wurde <authentication>
auch für die Unterstützung der formularbasierten Authentifizierung konfiguriert.
<configuration>
<system.web>
...
<authentication mode="Forms" />
...
</system.web>
</configuration>
Einschränken des Zugriffs auf die Verwaltungsseiten
ASP.NET erleichtert das Erteilen oder Verweigern des Zugriffs auf eine bestimmte Datei oder einen bestimmten Ordner für Benutzer oder Rollen über die URL-Autorisierungsfunktion . (Wir haben kurz die URL-Autorisierung im Tutorial "Hauptunterschiede zwischen IIS und ASP.NET Development Server" erläutert und gezeigt, wie IIS und der ASP.NET Development Server URL-Autorisierungsregeln für statischen und dynamischen Inhalt unterschiedlich anwenden.) Da wir den Zugriff auf den Ordner mit Ausnahme der ~/Admin
Benutzer in der rolle Admin verbieten möchten, müssen wir diesem Ordner URL-Autorisierungsregeln hinzufügen. Insbesondere müssen die URL-Autorisierungsregeln Benutzern in der Admin Rolle zulassen und allen anderen Benutzern verweigern. Dies wird erreicht, indem dem Ordner eine Web.config
Datei ~/Admin
mit dem folgenden Inhalt hinzugefügt wird:
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<allow roles="Admin" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
Weitere Informationen zu ASP.NET URL-Autorisierungsfeatures und deren Verwendung zum Festlegen von Autorisierungsregeln für Benutzer und Rollen finden Sie in den Tutorials zur Benutzerbasierten Autorisierung und rollenbasierten Autorisierung in meinen Tutorials zur Sicherheit auf der Website.
Bereitstellen einer Webanwendung, die Application Services verwendet
Beim Bereitstellen einer Website, die Anwendungsdienste verwendet, und einem Anbieter, der die Anwendungsdienstinformationen in einer Datenbank speichert, ist es zwingend erforderlich, dass die von den Anwendungsdiensten benötigten Datenbankobjekte in der Produktionsdatenbank erstellt werden. Anfangs enthält die Produktionsdatenbank diese Objekte nicht. Wenn die Anwendung zum ersten Mal bereitgestellt wird (oder wenn sie zum ersten Mal nach dem Hinzufügen von Anwendungsdiensten bereitgestellt wird), müssen Sie zusätzliche Schritte unternehmen, um diese erforderlichen Datenbankobjekte in der Produktionsdatenbank abzurufen.
Eine weitere Herausforderung kann sich beim Bereitstellen einer Website mit Anwendungsdiensten ergeben, wenn Sie die in der Entwicklungsumgebung erstellten Benutzerkonten in die Produktionsumgebung replizieren möchten. Abhängig von der Konfiguration "Mitgliedschaft" und "Rollen" ist es möglich, dass sich diese Benutzer nicht bei der Webanwendung in der Produktionsdatenbank anmelden können, selbst wenn Sie die in der Entwicklungsumgebung erstellten Benutzerkonten erfolgreich in die Produktionsdatenbank kopieren. Wir untersuchen die Ursache dieses Problems und besprechen, wie sie verhindert werden können.
ASP.NET wird mit einem schönen Websiteverwaltungstool (Web Site Administration Tool, WSAT) ausgeliefert, das über Visual Studio gestartet werden kann und die Verwaltung von Benutzerkonten, Rollen und Autorisierungsregeln über eine webbasierte Schnittstelle ermöglicht. Leider funktioniert WSAT nur für lokale Websites, was bedeutet, dass es nicht verwendet werden kann, um Benutzerkonten, Rollen und Autorisierungsregeln für die Webanwendung in der Produktionsumgebung remote zu verwalten. Wir untersuchen verschiedene Möglichkeiten, um WSAT-ähnliches Verhalten von Ihrer Produktionswebsite aus zu implementieren.
Hinzufügen der Datenbankobjekte mithilfe von aspnet_regsql.exe
Im Tutorial Bereitstellen einer Datenbank wurde gezeigt, wie die Tabellen und Daten aus der Entwicklungsdatenbank in die Produktionsdatenbank kopiert werden. Diese Techniken können sicherlich verwendet werden, um die Datenbankobjekte der Anwendungsdienste in die Produktionsdatenbank zu kopieren. Eine weitere Option ist das aspnet_regsql.exe
Tool, mit dem die Datenbankobjekte der Anwendungsdienste hinzugefügt oder aus einer Datenbank entfernt werden.
Hinweis
Das aspnet_regsql.exe
Tool erstellt die Datenbankobjekte in einer angegebenen Datenbank. Es werden keine Daten in diesen Datenbankobjekten aus der Entwicklungsdatenbank in die Produktionsdatenbank migriert. Wenn Sie das Benutzerkonto und die Rolleninformationen in der Entwicklungsdatenbank in die Produktionsdatenbank kopieren möchten, verwenden Sie die Techniken, die im Tutorial Bereitstellen einer Datenbank behandelt werden.
Sehen wir uns an, wie sie die Datenbankobjekte mithilfe des aspnet_regsql.exe
Tools zur Produktionsdatenbank hinzufügen. Öffnen Sie zunächst Windows Explorer, und navigieren Sie zum Verzeichnis .NET Framework Version 2.0 auf Ihrem Computer, %WINDIR%\ Microsoft.NET\Framework\v2.0.50727. Dort sollten Sie das aspnet_regsql.exe
Tool finden. Dieses Tool kann über die Befehlszeile verwendet werden, enthält aber auch eine grafische Benutzeroberfläche. Doppelklicken Sie auf die Datei, um die aspnet_regsql.exe
grafische Komponente zu starten.
Das Tool zeigt zunächst einen Begrüßungsbildschirm an, auf dem der Zweck erläutert wird. Klicken Sie auf Weiter, um zum Bildschirm "Setupoption auswählen" zu gelangen, der in Abbildung 1 dargestellt ist. Von hier aus können Sie die Datenbankobjekte der Anwendungsdienste hinzufügen oder aus einer Datenbank entfernen. Da wir diese Objekte der Produktionsdatenbank hinzufügen möchten, wählen Sie die Option "SQL Server für Anwendungsdienste konfigurieren" aus, und klicken Sie auf Weiter.
Abbildung 1: Konfigurieren von SQL Server für Application Services (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Im Bildschirm "Server und Datenbank auswählen" werden Informationen zum Herstellen einer Verbindung mit der Datenbank angezeigt. Geben Sie den Datenbankserver, die Sicherheitsanmeldeinformationen und den Von Ihrem Webhostingunternehmen bereitgestellten Datenbanknamen ein, und klicken Sie auf Weiter.
Hinweis
Nachdem Sie Ihren Datenbankserver und Die Anmeldeinformationen eingegeben haben, erhalten Sie möglicherweise eine Fehlermeldung, wenn Sie die Dropdownliste der Datenbank erweitern. Das aspnet_regsql.exe
Tool fragt die sysdatabases
Systemtabelle ab, um eine Liste der Datenbanken auf dem Server abzurufen, aber einige Webhostingunternehmen sperren ihre Datenbankserver, sodass diese Informationen nicht öffentlich verfügbar sind. Wenn sie diesen Fehler erhalten, können Sie den Datenbanknamen direkt in die Dropdownliste eingeben.
Abbildung 2: Bereitstellen des Tools mit den Verbindungsinformationen Ihrer Datenbank (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Auf dem folgenden Bildschirm werden die Aktionen zusammengefasst, die in nächster Zeit ausgeführt werden, d. h. dass die Datenbankobjekte der Anwendungsdienste der angegebenen Datenbank hinzugefügt werden. Klicken Sie auf Weiter, um diese Aktion abzuschließen. Nach einigen Augenblicken wird der letzte Bildschirm angezeigt, in dem festgestellt wird, dass die Datenbankobjekte hinzugefügt wurden (siehe Abbildung 3).
Abbildung 3: Erfolg! Die Application Services-Datenbankobjekte wurden der Produktionsdatenbank hinzugefügt (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Um zu überprüfen, ob die Datenbankobjekte der Anwendungsdienste erfolgreich der Produktionsdatenbank hinzugefügt wurden, öffnen Sie SQL Server Management Studio, und stellen Sie eine Verbindung mit Ihrer Produktionsdatenbank her. Wie in Abbildung 4 dargestellt, sollten nun die Datenbanktabellen der Anwendungsdienste in Ihrer Datenbank aspnet_Applications
, aspnet_Membership
, aspnet_Users
usw. angezeigt werden.
Abbildung 4: Bestätigen, dass die Datenbankobjekte der Produktionsdatenbank hinzugefügt wurden (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Sie müssen das aspnet_regsql.exe
Tool nur verwenden, wenn Sie Ihre Webanwendung zum ersten Mal oder zum ersten Mal bereitstellen, nachdem Sie mit der Verwendung der Anwendungsdienste begonnen haben. Sobald sich diese Datenbankobjekte in der Produktionsdatenbank befinden, müssen sie nicht erneut hinzugefügt oder geändert werden.
Kopieren von Benutzerkonten aus der Entwicklung in die Produktion
Wenn Sie die SqlMembershipProvider
Anbieterklassen und SqlRoleProvider
zum Speichern der Anwendungsdienstinformationen in einer SQL Server-Datenbank verwenden, werden die Benutzerkonto- und Rolleninformationen in einer Vielzahl von Datenbanktabellen gespeichert, darunter aspnet_Users
, aspnet_Membership
, aspnet_Roles
und aspnet_UsersInRoles
. Wenn Sie während der Entwicklung Benutzerkonten in der Entwicklungsumgebung erstellen, können Sie diese Benutzerkonten in der Produktion replizieren, indem Sie die entsprechenden Datensätze aus den entsprechenden Datenbanktabellen kopieren. Wenn Sie den Datenbankveröffentlichungs-Assistenten zum Bereitstellen der Datenbankobjekte der Anwendungsdienste verwendet haben, haben Sie möglicherweise auch die Datensätze kopiert, was dazu führen würde, dass sich die in der Entwicklung erstellten Benutzerkonten ebenfalls in der Produktion befinden. Je nach Ihren Konfigurationseinstellungen stellen Sie jedoch möglicherweise fest, dass benutzer, deren Konten in der Entwicklung erstellt und in die Produktion kopiert wurden, sich nicht über die Produktionswebsite anmelden können. Woran liegt das?
Die SqlMembershipProvider
Anbieterklassen und SqlRoleProvider
wurden so konzipiert, dass eine einzelne Datenbank als Benutzerspeicher für mehrere Anwendungen dienen kann, wobei jede Anwendung theoretisch Benutzer mit überlappenden Benutzernamen und Rollen mit demselben Namen haben könnte. Um diese Flexibilität zu ermöglichen, verwaltet die Datenbank eine Liste der Anwendungen in der aspnet_Applications
Tabelle, und jeder Benutzer ist einer dieser Anwendungen zugeordnet. Insbesondere enthält die aspnet_Users
Tabelle eine ApplicationId
Spalte, die jeden Benutzer an einen Datensatz in der aspnet_Applications
Tabelle bindet.
Zusätzlich zur ApplicationId
Spalte enthält die aspnet_Applications
Tabelle auch eine ApplicationName
Spalte, die einen benutzerfreundlicheren Namen für die Anwendung bereitstellt. Wenn eine Website versucht, mit einem Benutzerkonto zu arbeiten, z. B. das Überprüfen der Anmeldeinformationen eines Benutzers auf der Anmeldeseite, muss sie der SqlMembershipProvider
Klasse mitteilen, mit welcher Anwendung sie arbeiten soll. Dies geschieht in der Regel durch Angabe des Anwendungsnamens. Dieser Wert stammt aus der Konfiguration des Anbieters in Web.config
– insbesondere über das applicationName
-Attribut.
Aber was geschieht, wenn das applicationName
Attribut in Web.config
nicht angegeben wird? In diesem Fall verwendet das Mitgliedschaftssystem den Stammpfad der applicationName
Anwendung als Wert. Wenn das applicationName
Attribut nicht explizit in Web.config
festgelegt ist, besteht die Möglichkeit, dass die Entwicklungsumgebung und die Produktionsumgebung einen anderen Anwendungsstamm verwenden und daher unterschiedlichen Anwendungsnamen in den Anwendungdiensten zugeordnet werden. Wenn ein solcher Konflikt auftritt, verfügen die in der Entwicklungsumgebung erstellten Benutzer über einen ApplicationId
Wert, der nicht mit dem ApplicationId
Wert für die Produktionsumgebung übereinstimmt. Das Ergebnis ist, dass sich diese Benutzer nicht anmelden können.
Hinweis
Wenn Sie sich in dieser Situation befinden und Benutzerkonten mit einem nicht übereinstimmenden ApplicationId
Wert in die Produktion kopiert wurden, können Sie eine Abfrage schreiben, um diese falschen ApplicationId
Werte auf die in der ApplicationId
Produktion verwendete zu aktualisieren. Nach der Aktualisierung können sich die Benutzer, deren Konten in der Entwicklungsumgebung erstellt wurden, jetzt in der Produktion bei der Webanwendung anmelden.
Die gute Nachricht ist, dass Sie einen einfachen Schritt ausführen können, um sicherzustellen, dass die beiden Umgebungen dasselbe ApplicationId
verwenden. Legen Sie das applicationName
Attribut Web.config
explizit für alle Ihre Anwendungsdienstanbieter fest. Ich habe das applicationName
Attribut explizit auf "BookReviews" in den <membership>
Elementen und <roleManager>
festgelegt, wie dieser Codeausschnitt aus Web.config
zeigt.
<membership defaultProvider="ReviewMembership">
<providers>
<clear />
<add type="System.Web.Security.SqlMembershipProvider"
name="ReviewMembership"
connectionStringName="ReviewsConnectionString"
applicationName="BookReviews" />
</providers>
</membership>
Weitere Informationen zum Festlegen des applicationName
Attributs und zu den Dahinter zugehörigen Gründen finden Sie im Blogbeitrag von Scott Guthrie : Legen Sie beim Konfigurieren von ASP.NET Mitgliedschaft und anderen Anbietern immer die ApplicationName-Eigenschaft fest.
Verwalten von Benutzerkonten in der Produktionsumgebung
Das ASP.NET Web Site Administration Tool (WSAT) erleichtert das Erstellen und Verwalten von Benutzerkonten, das Definieren und Anwenden von Rollen sowie das Schreiben von benutzer- und rollenbasierten Autorisierungsregeln. Sie können WSAT in Visual Studio starten, indem Sie zum Projektmappen-Explorer wechseln und auf das Symbol ASP.NET Konfiguration klicken, oder indem Sie zum Menü Website oder Projekt wechseln und das Menüelement ASP.NET Konfiguration auswählen. Leider kann WSAT nur mit lokalen Websites arbeiten. Daher können Sie die WSAT-Datei ihrer Arbeitsstation nicht verwenden, um die Website in der Produktionsumgebung zu verwalten.
Die gute Nachricht ist, dass alle funktionen, die von WSAT bereitgestellt werden, programmgesteuert über die Mitgliedschafts- und Rollen-APIs verfügbar sind. darüber hinaus verwenden viele der WSAT-Bildschirme die standardmäßigen ASP.NET Login-bezogenen Steuerelemente. Kurz gesagt, Sie können Ihrer Website ASP.NET Seiten hinzufügen, die die erforderlichen Verwaltungsfunktionen bieten.
Denken Sie daran, dass in einem früheren Tutorial die Webanwendung "Buchüberprüfungen" aktualisiert wurde, um einen ~/Admin
Ordner einzuschließen, und dieser Ordner wurde so konfiguriert, dass nur Benutzer in der rolle "Admin" zugelassen werden. Ich habe dem Ordner eine Seite mit dem Namen CreateAccount.aspx
hinzugefügt, aus der ein Administrator ein neues Benutzerkonto erstellen kann. Auf dieser Seite wird das CreateUserWizard-Steuerelement verwendet, um die Benutzeroberfläche und die Back-End-Logik zum Erstellen eines neuen Benutzerkontos anzuzeigen. Darüber hinaus habe ich das Steuerelement so angepasst, dass es ein CheckBox-Objekt enthält, das auffordert, ob der neue Benutzer auch der rolle Admin hinzugefügt werden soll (siehe Abbildung 5). Mit etwas Arbeit können Sie einen benutzerdefinierten Satz von Seiten erstellen, der die Benutzer- und Rollenverwaltungsaufgaben implementiert, die andernfalls von WSAT bereitgestellt würden.
Hinweis
Weitere Informationen zur Verwendung der Mitgliedschafts- und Rollen-APIs zusammen mit den anmeldebezogenen ASP.NET Websteuerelementen finden Sie in den Tutorials zur Websitesicherheit. Weitere Informationen zum Anpassen des CreateUserWizard-Steuerelements finden Sie in den Tutorials erstellen von Benutzerkonten und Speichern zusätzlicher Benutzerinformationen , oder lesen Sie den Artikel von Erich Peterson , Anpassen des CreateUserWizard-Steuerelements.
Abbildung 5: Administratoren können neue Benutzerkonten erstellen (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Wenn Sie die vollständige Funktionalität von WSAT benötigen, lesen Sie Das Verwaltungstool für Ihre eigene Website, in dem autor Dan Clem den Prozess der Erstellung eines benutzerdefinierten WSAT-ähnlichen Tools durchläuft. Dan gibt den Quellcode seiner Anwendung (in C#) frei und stellt schrittweise Anweisungen zum Hinzufügen zu Ihrer gehosteten Website bereit.
Zusammenfassung
Beim Bereitstellen einer Webanwendung, die die Anwendungsdienst-Datenbankimplementierung verwendet, müssen Sie zunächst sicherstellen, dass die Produktionsdatenbank über die erforderlichen Datenbankobjekte verfügt. Diese Objekte können mithilfe der im Tutorial Bereitstellen einer Datenbank beschriebenen Techniken hinzugefügt werden. Alternativ können Sie das aspnet_regsql.exe
Tool verwenden, wie wir in diesem Tutorial gezeigt haben. Weitere Herausforderungen, die wir behandelt haben, sind die Synchronisierung des Anwendungsnamens, der in den Entwicklungs- und Produktionsumgebungen verwendet wird (was wichtig ist, wenn Benutzer und Rollen, die in der Entwicklungsumgebung erstellt wurden, in der Produktion gültig sein sollen) und Techniken zum Verwalten der Benutzer und Rollen in der Produktionsumgebung.
Viel Spaß beim Programmieren!
Weitere Informationen
Weitere Informationen zu den in diesem Tutorial behandelten Themen finden Sie in den folgenden Ressourcen:
- ASP.NET SQL Server-Registrierungstool (aspnet_regsql.exe)
- Erstellen der Application Services-Datenbank für SQL Server
- Erstellen des Mitgliedschaftsschemas in SQL Server
- Untersuchen von ASP. Mitgliedschaft, Rollen und Profil von NET
- Rollen des eigenen Websiteverwaltungstools
- Tutorials zur Websitesicherheit
- Übersicht über das Websiteverwaltungstool