Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
von Scott Mitchell
Hinweis
Seit der Erstellung dieses Artikels wurden die ASP.NET Mitgliedschaftsanbieter durch ASP.NET Identityersetzt. Es wird dringend empfohlen, Apps so zu aktualisieren, dass sie die ASP.NET Identity Platform anstelle der Mitgliedschaftsanbieter verwenden, die zu dem Zeitpunkt dieses Artikels vorgestellt wurden. ASP.NET Identity hat 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
- Anspruchsbasierte Identitätsunterstützung
- Bessere Interoperabilität mit ASP.Net Core
ASP.NET Version 2.0 hat eine Reihe von Anwendungsdiensten eingeführt, die Teil von .NET Framework sind und als Eine Suite von Bausteindiensten dienen, mit denen Sie Ihrer Webanwendung umfangreiche Funktionen hinzufügen können. In diesem Lernprogramm 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 hat eine Reihe von Anwendungsdiensten eingeführt, die Teil von .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 von benutzerdefinierten, benutzerspezifischen Inhalten.
- Websiteübersicht – 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 werden.
- 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 in einem Webhosting-Unternehmen gehostet werden, sind anbieter, die eine SQL Server-Datenbankimplementierung verwenden. Das SqlMembershipProvider ist beispielsweise ein Anbieter für die Membership-API, der Benutzerkontoinformationen in einer Microsoft SQL Server-Datenbank speichert.
Die Verwendung der Anwendungsdienste und SQL Server-Anbieter stellt beim Bereitstellen der Anwendung einige Herausforderungen hinzu. Zunächst müssen die Datenbankobjekte der Anwendungsdienste sowohl in der Entwicklungs- als auch in der Produktionsdatenbank ordnungsgemäß erstellt und entsprechend initialisiert werden. Es gibt auch wichtige Konfigurationseinstellungen, die vorgenommen werden müssen.
Hinweis
Die Anwendungsdienst-APIs wurden mithilfe des Anbietermodells entwickelt, einem Entwurfsmuster, das es ermöglicht, die Implementierungsdetails einer API zur Laufzeit bereitzustellen. Das .NET Framework wird mit einer Reihe von Anwendungsdienstanbietern ausgeliefert, die verwendet werden können, z. B. die SqlMembershipProvider und SqlRoleProviderdie Anbieter für die Mitgliedschafts- und Rollen-APIs, die eine SQL Server-Datenbankimplementierung verwenden. Sie können auch einen benutzerdefinierten Anbieter erstellen und anschließen. Tatsächlich enthält die Book Reviews-Webanwendung bereits einen benutzerdefinierten Anbieter für die Siteübersichts-API (ReviewSiteMapProvider), der die Siteübersicht aus den Daten in den Genres und Books Tabellen der Datenbank erstellt.
Dieses Lernprogramm 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 behandelt, die Anwendungsdienste mit einer SQL Server-Datenbankimplementierung verwendet, und schließt mit der Behandlung häufiger Probleme bei der Verwaltung von Benutzerkonten und -rollen in der Produktionsumgebung ab.
Aktualisierungen der Anwendung "Buchrezensionen"
In den letzten Tutorials wurde die Book Reviews Webanwendung von einer statischen Website in eine dynamische, datengetriebene Webanwendung umgewandelt, die über eine Reihe von Verwaltungsseiten zur Verwaltung von Genres und Rezensionen verfügt. Dieser Verwaltungsabschnitt ist derzeit jedoch nicht geschützt – jeder Benutzer, der die URL der Verwaltungsseite kennt (oder errät), kann sich Zugang verschaffen und Rezensionen auf unserer Website erstellen, bearbeiten oder löschen. Eine gängige Möglichkeit 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 einzuschränken. Die Book Reviews-Webanwendung, die mit diesem Lernprogramm zum Download zur Verfügung steht, unterstützt Benutzerkonten und Rollen. Sie verfügt über eine einzelne Rolle, die mit dem Namen "Administrator" definiert ist, 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 Administratorrolle, Alice ist nicht. Die Nichtverwaltungsseiten 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 Administratorrolle anmelden.
Die Masterseite der Book Reviews-Applikation wurde aktualisiert, um eine andere Benutzeroberfläche für authentifizierte und anonyme Benutzer bereitzustellen. 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 "Mitgliedschaften" und "Rollen", um Benutzerkonten zu unterstützen und diese Benutzer in Rollen zu gruppieren (nämlich die Administratorrolle). Die SqlMembershipProvider Klassen und SqlRoleProvider Anbieterklassen werden verwendet, da wir Konto- und Rolleninformationen in einer SQL Server-Datenbank speichern möchten.
Hinweis
Dieses Lernprogramm ist nicht für eine detaillierte Untersuchung bei der Konfiguration einer Webanwendung zur Unterstützung der Mitgliedschafts- und Rollen-APIs gedacht. Für einen gründlichen Überblick über diese APIs und die Schritte, die Sie ausführen müssen, um eine Website für die Verwendung zu konfigurieren, lesen Sie bitte in meinen Website-Sicherheitstutorials.
Um die Anwendungsdienste mit einer SQL Server-Datenbank zu verwenden, müssen Sie zuerst die Datenbankobjekte hinzufügen, die von diesen Anbietern verwendet werden, der Datenbank, 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 Klassen und SqlRoleProvider Anbieter eine SQL Server Express Edition-Datenbank, die sich im Anwendungsordner ASPNETDB befindetApp_Data. Wenn eine solche Datenbank nicht vorhanden ist, wird sie automatisch mit den erforderlichen Datenbankobjekten dieser Anbieter zur Laufzeit erstellt.
Es ist möglich und in der Regel ideal, die Datenbankobjekte der Anwendungsdienste in derselben Datenbank zu erstellen, in der die anwendungsspezifischen Daten der Website gespeichert werden. Das .NET Framework wird mit einem Tool ausgeliefert aspnet_regsql.exe , das die Datenbankobjekte in einer angegebenen Datenbank installiert. Ich habe dieses Tool verwendet, um diese Objekte zur Reviews.mdf Datenbank im App_Data Ordner (der Entwicklungsdatenbank) hinzuzufügen. Wir werden sehen, wie Sie dieses Tool später in diesem Lernprogramm verwenden, wenn wir diese Objekte zur Produktionsdatenbank hinzufügen.
Wenn Sie die Anwendungsdienste-Datenbankobjekte zu einer anderen Datenbank hinzufügen, als ASPNETDB Sie die Konfigurationen der SqlMembershipProvider Klassen und SqlRoleProvider Anbieterklassen so anpassen müssen, dass sie die entsprechende Datenbank verwenden. Um den Mitgliedschaftsanbieter anzupassen, fügen Sie ein <Mitgliedschaftselement> innerhalb des <system.web> Abschnitts in Web.config; verwenden Sie das <roleManager-Element>, um den Rollenanbieter zu konfigurieren. Der folgende Codeausschnitt stammt aus der Anwendung "Book Reviews" Web.config und zeigt die Konfiguration für die Mitgliedschafts- und Rollen-APIs an. Beachten Sie, dass sowohl ReviewMembership als auch ReviewRole einen neuen Anbieter registrieren, die jeweils die Anbieter SqlMembershipProvider 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 <authentication> wurde auch so konfiguriert, dass die formularbasierte Authentifizierung unterstützt wird.
<configuration>
<system.web>
...
<authentication mode="Forms" />
...
</system.web>
</configuration>
Einschränken des Zugriffs auf die Verwaltungsseiten
ASP.NET erleichtert das Gewähren oder Verweigern des Zugriffs auf eine bestimmte Datei oder einen bestimmten Ordner durch den Benutzer oder die Rolle über die URL-Autorisierungsfunktion . (Wir haben kurz die URL-Autorisierung im Lernprogramm zwischen IIS und ASP.NET Development Server erörtert und gezeigt, wie IIS und die ASP.NET Development Server URL-Autorisierungsregeln für statischen und dynamischen Inhalt unterschiedlich anwenden.) Da wir den Zugriff auf den ~/Admin Ordner mit Ausnahme dieser Benutzer in der Administratorrolle verbieten möchten, müssen wir diesem Ordner URL-Autorisierungsregeln hinzufügen. Insbesondere müssen die URL-Autorisierungsregeln es Benutzern in der Admin-Rolle erlauben und alle anderen Benutzer ablehnen. Dazu fügen Sie dem Web.config Ordner eine ~/Admin Datei mit dem folgenden Inhalt hinzu:
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<allow roles="Admin" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
Weitere Informationen zu den URL-Autorisierungsfeatures von ASP.NET und deren Verwendung, um Autorisierungsregeln für Benutzer und Rollen festzulegen, finden Sie in den Tutorials benutzerbasierte Autorisierung und rollenbasierte Autorisierung aus meinen Sicherheits-Tutorials für Websites.
Bereitstellen einer Webanwendung, die Anwendungsdienste verwendet
Bei der Bereitstellung einer Website, die Anwendungsdienste und einen Anbieter verwendet, der die Anwendungsdiensteinformationen in einer Datenbank speichert, ist es zwingend erforderlich, dass die datenbankobjekte, die von den Anwendungsdiensten benötigt werden, in der Produktionsdatenbank erstellt werden. Zunächst enthält die Produktionsdatenbank diese Objekte nicht. Wenn die Anwendung zum ersten Mal bereitgestellt wird (oder wenn sie zum ersten Mal bereitgestellt wird, nachdem Anwendungsdienste hinzugefügt wurden), müssen Sie zusätzliche Schritte ausführen, um diese erforderlichen Datenbankobjekte in der Produktionsdatenbank abzurufen.
Eine weitere Herausforderung kann beim Bereitstellen einer Website auftreten, die Anwendungsdienste verwendet, wenn Sie beabsichtigen, die in der Entwicklungsumgebung erstellten Benutzerkonten in die Produktionsumgebung zu replizieren. Je nach Konfiguration der Mitgliedschaft und Rollen ist es möglich, dass sich diese Benutzer nicht bei der Webanwendung in der Produktion anmelden können, auch wenn Sie die Benutzerkonten erfolgreich kopieren, die in der Entwicklungsumgebung erstellt wurden. Wir werden uns die Ursache dieses Problems ansehen und besprechen, wie man es verhindern kann.
ASP.NET wird mit einem schönen Web Site Administration Tool (WSAT) ausgeliefert, das über Visual Studio gestartet werden kann, und ermöglicht die Verwaltung von Benutzerkonten, Rollen und Autorisierungsregeln über eine webbasierte Schnittstelle. Leider funktioniert das 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 werden uns verschiedene Möglichkeiten ansehen, das WSAT-ähnliche Verhalten auf Ihrer Produktionswebsite zu implementieren.
Hinzufügen der Datenbankobjekte mithilfe von aspnet_regsql.exe
Das Lernprogramm zum Bereitstellen einer Datenbank zeigte, wie die Tabellen und Daten aus der Entwicklungsdatenbank in die Produktionsdatenbank kopiert werden, und 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 aus einer Datenbank hinzugefügt oder 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 Lernprogramm zum 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 sollte das aspnet_regsql.exe Tool gefunden werden. 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, der seinen Zweck erläutert. Klicken Sie auf "Weiter", um zum Bildschirm "Setupoption auswählen" zu wechseln, der in Abbildung 1 dargestellt wird. 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: Auswählen der Konfiguration von SQL Server für Application Services (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Auf dem Bildschirm „Server und Datenbank auswählen“ werden Sie dazu aufgefordert, Informationen zum Herstellen einer Verbindung mit der Datenbank bereitzustellen. 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, wird beim Erweitern der Dropdown-Liste der Datenbank möglicherweise ein Fehler angezeigt. Das aspnet_regsql.exe Tool fragt die sysdatabases Systemtabelle ab, um eine Liste von Datenbanken auf dem Server abzurufen, aber einige Webhosting-Unternehmen 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 mit voller Größe anzuzeigen)
Der folgende Bildschirm fasst die Aktionen zusammen, die gerade ausgeführt werden sollen, nämlich dass die Datenbankobjekte der Anwendungsdienste der angegebenen Datenbank hinzugefügt werden. Klicken Sie auf "Weiter", um diese Aktion abzuschließen. Nach ein paar Momenten wird der letzte Bildschirm angezeigt, wobei angegeben wird, dass die Datenbankobjekte hinzugefügt wurden (siehe Abbildung 3).
Abbildung 3: Erfolg! Die Application Services-Datenbankobjekte wurden der Produktionsdatenbank hinzugefügt (Klicken Sie, um das Bild in voller Größe anzuzeigen)
Öffnen Sie SQL Server Management Studio, und stellen Sie eine Verbindung mit Ihrer Produktionsdatenbank her, um zu überprüfen, ob die Datenbankobjekte der Anwendungsdienste erfolgreich hinzugefügt wurden. Wie in Abbildung 4 dargestellt, sollten nun die Datenbanktabellen der Anwendungsdienste in Ihrer Datenbank angezeigt werden, aspnet_Applications, aspnet_Membership, aspnet_Users usw.
Abbildung 4: Bestätigen, dass die Datenbankobjekte zur 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 bereitstellen oder zum ersten Mal, 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
Bei Verwendung der Anbieterklassen SqlMembershipProvider und SqlRoleProvider zum Speichern der Anwendungsdienstinformationen in einer SQL Server-Datenbank werden die Benutzerkonto- und Rolleninformationen in einer Vielzahl von Datenbanktabellen gespeichert, darunter aspnet_Users, aspnet_Membership, aspnet_Roles und aspnet_UsersInRoles sowie andere. 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 ausgewählt, die Datensätze zu kopieren, was dazu führen würde, dass die benutzerkonten, die in der Entwicklung erstellt wurden, ebenfalls in der Produktion enthalten sind. Je nach Ihren Konfigurationseinstellungen stellen Sie jedoch möglicherweise fest, dass sich die Benutzer, deren Konten in der Entwicklung erstellt und in die Produktion kopiert wurden, nicht von der Produktionswebsite anmelden können. Was ist los?
Die SqlMembershipProvider Klassen und SqlRoleProvider Anbieterklassen wurden so konzipiert, dass eine einzelne Datenbank als Benutzerspeicher für mehrere Anwendungen dienen könnte, 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 verfügt die aspnet_Users Tabelle über eine ApplicationId Spalte, die jeden Benutzer mit einem Datensatz in der aspnet_Applications Tabelle verknüpft.
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 von der Anmeldeseite, muss sie der SqlMembershipProvider Klasse mitteilen, mit welcher Anwendung sie arbeiten soll. Dies geschieht in der Regel durch Angabe des Anwendungsnamens, und der Wert stammt aus der Konfiguration des Anbieters in Web.config - insbesondere über das applicationName Attribut.
Aber was geschieht, wenn das applicationNameAttribut nicht angegeben istWeb.config? In einem solchen Fall verwendet das Mitgliedschaftssystem den Anwendungsstammpfad als applicationName Wert. Wenn das applicationName-Attribut in Web.config nicht explizit festgelegt wird, besteht die Möglichkeit, dass in der Entwicklungsumgebung und der Produktionsumgebung ein anderer Anwendungsstamm verwendet wird und daher unterschiedliche Anwendungsnamen in den Anwendungsdiensten zugeordnet werden. Wenn eine solche Diskrepanz auftritt, haben die Benutzer, die in der Entwicklungsumgebung erstellt wurden, einen ApplicationId Wert, der nicht mit dem ApplicationId Wert der Produktionsumgebung übereinstimmt. Das Nettoergebnis ist, dass diese Benutzer sich nicht anmelden können.
Hinweis
Wenn Sie sich in dieser Situation befinden – mit Benutzerkonten, die in die Produktionsumgebung kopiert wurden, mit einem nicht übereinstimmenden ApplicationId Wert – könnten Sie eine Abfrage schreiben, um diese falschen ApplicationId Werte auf die in der Produktionsumgebung verwendeten ApplicationId zu aktualisieren. Nach der Aktualisierung konnten sich die Benutzer, deren Konten in der Entwicklungsumgebung erstellt wurden, jetzt bei der Webanwendung bei der Produktion anmelden.
Die gute Nachricht ist, dass es einen einfachen Schritt gibt, den Sie ausführen können, um sicherzustellen, dass die beiden Umgebungen dasselbe ApplicationId verwenden - explizit das applicationName Attribut in Web.config für alle Ihre Anwendungsdiensteanbieter festlegen. Ich setze das applicationName-Attribut explizit auf "BookReviews" in den <membership> und <roleManager>-Elementen, wie dieser Codeausschnitt Web.config zeigt.
<membership defaultProvider="ReviewMembership">
<providers>
<clear />
<add type="System.Web.Security.SqlMembershipProvider"
name="ReviewMembership"
connectionStringName="ReviewsConnectionString"
applicationName="BookReviews" />
</providers>
</membership>
Weitere Diskussionen zum Festlegen des applicationName Attributs und der dahinter gehenden Begründung finden Sie im Blogbeitrag von Scott Guthrie , legen Sie immer die applicationName-Eigenschaft fest, wenn Sie ASP.NET Mitgliedschaft und andere Anbieter konfigurieren.
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 Anwenden von Benutzer- und rollenbasierten Autorisierungsregeln. Sie können WSAT aus Visual Studio starten, indem Sie zum Projektmappen-Explorer wechseln und auf das Symbol ASP.NET Konfigurationssymbol klicken oder zu den Menüs "Website" oder "Project" wechseln und das Menüelement "ASP.NET Konfiguration" auswählen. Leider kann der WSAT nur mit lokalen Websites arbeiten. Daher können Sie das WSAT von Ihrer Arbeitsstation nicht verwenden, um die Website in der Produktionsumgebung zu verwalten.
Die gute Nachricht ist, dass alle funktionen, die vom WSAT bereitgestellt werden, programmgesteuert über die Mitgliedschafts- und Rollen-APIs verfügbar sind; darüber hinaus verwenden viele der WSAT-Bildschirme die Standard-ASP.NET Login-bezogene Steuerelemente. Kurz gesagt, Sie können Ihrer Website ASP.NET Seiten hinzufügen, die die erforderlichen Verwaltungsfunktionen bieten.
Erinnern Sie sich daran, dass ein früheres Lernprogramm die Webanwendung "Buchüberprüfungen" aktualisiert hat, um einen ~/Admin Ordner einzuschließen, und dieser Ordner wurde so konfiguriert, dass nur Benutzer in der Administratorrolle zugelassen werden. Ich habe diesem Ordner eine Seite hinzugefügt CreateAccount.aspx , von der ein Administrator ein neues Benutzerkonto erstellen kann. Diese Seite verwendet das CreateUserWizard-Steuerelement, um die Benutzeroberfläche und Back-End-Logik zum Erstellen eines neuen Benutzerkontos anzuzeigen. Darüber hinaus habe ich das Steuerelement so angepasst, dass es ein CheckBox-Steuerelement enthält, das anfordert, ob der neue Benutzer auch der Administratorrolle hinzugefügt werden soll (siehe Abbildung 5). Mit etwas Arbeit können Sie einen benutzerdefinierten Satz von Seiten erstellen, der die benutzer- und rollenverwaltungsbezogenen Aufgaben implementiert, die andernfalls vom WSAT bereitgestellt werden.
Hinweis
Wenn Sie weitere Informationen zur Verwendung der Mitgliedschafts- und Rollen-APIs zusammen mit den anmeldebezogenen ASP.NET Websteuerelementen wünschen, lesen Sie unbedingt meine Lernprogramme zur Websitesicherheit. Weitere Informationen zum Anpassen des CreateUserWizard-Steuerelements finden Sie in den Lernprogrammen " Erstellen von Benutzerkonten und Speichern zusätzlicher Benutzerinformationen ", oder lesen Sie den Artikel Erich Peterson , Anpassen des CreateUserWizard-Steuerelements.
Abbildung 5: Administratoren können neue Benutzerkonten erstellen (Klicken Sie, um das Bild in voller Größe anzuzeigen)
Wenn Sie die volle Funktionalität des WSAT benötigen, werfen Sie einen Blick auf Rolling Your Own Web Site Administration Tool, in dem der Autor Dan Clem den Prozess des Erstellens eines benutzerdefinierten, WSAT-ähnlichen Tools beschreibt. Dan teilt seinen Quellcode der Anwendung (in C#) und enthält schrittweise Anleitungen zum Hinzufügen der Anwendung zu Ihrer gehosteten Website.
Zusammenfassung
Bei der Bereitstellung einer Webanwendung, die die Anwendungsdienste-Datenbankimplementierung verwendet, müssen Sie zuerst sicherstellen, dass die Produktionsdatenbank über die erforderlichen Datenbankobjekte verfügt. Diese Objekte können mithilfe der im Lernprogramm " Bereitstellen einer Datenbank " erläuterten Techniken hinzugefügt werden. Alternativ können Sie das aspnet_regsql.exe Tool verwenden, wie wir in diesem Lernprogramm gesehen haben. Weitere Herausforderungen, die wir angesprochen haben, drehen sich um die Synchronisierung des Anwendungsnamens in den Entwicklungs- und Produktionsumgebungen (was wichtig ist, wenn Benutzer und Rollen, die in der Entwicklungsumgebung erstellt wurden, in der Produktion gültig sein sollen) und um Techniken zur Verwaltung der Benutzer und Rollen in der Produktionsumgebung.
Glückliche Programmierung!
Weiterführende Lektüre
Weitere Informationen zu den in diesem Lernprogramm erläuterten 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
- Untersuchung der ASP.NET-Mitgliedschaft, -Rollen und -Profile
- Erstellen eines eigenen Website-Administrationstools
- Lernprogramme zur Websitesicherheit
- Übersicht über das Websiteverwaltungstool