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 Microsoft
Erfahren Sie, wie Sie das Attribut [Authorize] verwenden, um bestimmte Seiten in Ihrer MVC-Anwendung mit einem Kennwort zu schützen. Sie erfahren, wie Sie das Websiteverwaltungstool verwenden, um Benutzer und Rollen zu erstellen und zu verwalten. Außerdem erfahren Sie, wie Sie konfigurieren, wo Benutzerkonto- und Rolleninformationen gespeichert werden.
In diesem Tutorial wird erläutert, wie Sie die Formularauthentifizierung verwenden können, um die Ansichten in Ihren ASP.NET MVC-Anwendungen mit einem Kennwort zu schützen. Sie erfahren, wie Sie das Websiteverwaltungstool verwenden, um Benutzer und Rollen zu erstellen. Außerdem erfahren Sie, wie Sie verhindern können, dass nicht autorisierte Benutzer Controlleraktionen aufrufen. Schließlich erfahren Sie, wie Sie konfigurieren, wo Benutzernamen und Kennwörter gespeichert werden.
Verwenden des Websiteverwaltungstools
Bevor wir etwas anderes tun, sollten wir damit beginnen, einige Benutzer und Rollen zu erstellen. Die einfachste Möglichkeit zum Erstellen neuer Benutzer und Rollen besteht darin, das Visual Studio 2008-Websiteverwaltungstool zu nutzen. Sie können dieses Tool starten, indem Sie die Menüoption Projekt und ASP.NET Konfiguration auswählen. Alternativ können Sie das Websiteverwaltungstool starten, indem Sie auf das (etwas beängstigende) Symbol des Hammers klicken, der auf die Welt trifft, die oben im fenster Projektmappen-Explorer angezeigt wird (siehe Abbildung 1).
Abbildung 1: Starten des Websiteverwaltungstools
Im Websiteverwaltungstool erstellen Sie neue Benutzer und Rollen, indem Sie die Registerkarte Sicherheit auswählen. Klicken Sie auf den Link Benutzer erstellen , um einen neuen Benutzer namens Stephen zu erstellen (siehe Abbildung 2). Geben Sie dem Stephen-Benutzer ein beliebiges Kennwort an (z. B. geheimnis).
Abbildung 2 – Erstellen eines neuen Benutzers
Sie erstellen neue Rollen, indem Sie zuerst Rollen aktivieren und eine oder mehrere Rollen definieren. Aktivieren Sie Rollen, indem Sie auf den Link Rollen aktivieren klicken. Erstellen Sie als Nächstes eine Rolle namens Administratoren , indem Sie auf den Link Rollen erstellen oder verwalten klicken (siehe Abbildung 3).
Abbildung 3: Erstellen einer neuen Rolle
Erstellen Sie schließlich einen neuen Benutzer namens Sally, und ordnen Sie Sally der Rolle Administratoren zu, indem Sie auf den Link Benutzer erstellen klicken und beim Erstellen von Sally Administratoren auswählen (siehe Abbildung 4).
Abbildung 4: Hinzufügen eines Benutzers zu einer Rolle
Wenn alles gesagt und getan ist, sollten Sie zwei neue Benutzer namens Stephen und Sally haben. Außerdem sollten Sie über eine neue Rolle namens Administratoren verfügen. Sally ist Mitglied der Administratorrolle, Stephen nicht.
Autorisierung erforderlich
Sie können verlangen, dass ein Benutzer authentifiziert wird, bevor der Benutzer eine Controlleraktion aufruft, indem Sie der Aktion das Attribut [Authorize] hinzufügen. Sie können das Attribut [Authorize] auf eine einzelne Controlleraktion anwenden, oder Sie können dieses Attribut auf eine gesamte Controllerklasse anwenden.
Der Controller in Listing 1 macht beispielsweise eine Aktion namens CompanySecrets() verfügbar. Da diese Aktion mit dem [Authorize]-Attribut versehen ist, kann diese Aktion nur aufgerufen werden, wenn ein Benutzer authentifiziert ist.
Auflistung 1: Controllers\HomeController.vb
<HandleError()> _
Public Class HomeController
Inherits System.Web.Mvc.Controller
Function Index()
Return View()
End Function
<Authorize()> _
Function CompanySecrets()
Return View()
End Function
End Class
Wenn Sie die CompanySecrets()-Aktion aufrufen, indem Sie die URL /Home/CompanySecrets in die Adressleiste Ihres Browsers eingeben, und Sie kein authentifizierter Benutzer sind, werden Sie automatisch zur Anmeldeansicht weitergeleitet (siehe Abbildung 5).
Abbildung 5: Anmeldeansicht
Sie können die Anmeldeansicht verwenden, um Ihren Benutzernamen und Ihr Kennwort einzugeben. Wenn Sie kein registrierter Benutzer sind, können Sie auf den Registrierungslink klicken, um zur Ansicht Register zu navigieren (siehe Abbildung 6). Sie können die Ansicht Registrieren verwenden, um ein neues Benutzerkonto zu erstellen.
Abbildung 6– Die Registeransicht
Nachdem Sie sich erfolgreich angemeldet haben, wird die Ansicht CompanySecrets angezeigt (siehe Abbildung 7). Standardmäßig werden Sie weiterhin angemeldet, bis Sie Ihr Browserfenster schließen.
Abbildung 7 – Ansicht "CompanySecrets"
Autorisieren nach Benutzername oder Benutzerrolle
Sie können das Attribut [Authorize] verwenden, um den Zugriff auf eine Controlleraktion auf eine bestimmte Gruppe von Benutzern oder eine bestimmte Gruppe von Benutzerrollen einzuschränken. Der geänderte Home-Controller in Listing 2 enthält beispielsweise zwei neue Aktionen namens StephenSecrets() und AdministratorSecrets().
Listing 2 – Controllers\HomeController.vb
<HandleError()> _
Public Class HomeController
Inherits System.Web.Mvc.Controller
Function Index()
Return View()
End Function
<Authorize()> _
Function CompanySecrets()
Return View()
End Function
<Authorize(Users:="Stephen")> _
Function StephenSecrets()
Return View()
End Function
<Authorize(Roles:="Administrators")> _
Function AdministratorSecrets()
Return View()
End Function
End Class
Nur ein Benutzer mit dem Benutzernamen Stephen kann die StephenSecrets()-Aktion aufrufen. Alle anderen Benutzer werden zur Anmeldeansicht umgeleitet. Die Users-Eigenschaft akzeptiert eine durch Trennzeichen getrennte Liste von Benutzerkontonamen.
Nur Benutzer mit der Rolle "Administratoren" können die Aktion AdministratorSecrets() aufrufen. Da Sally beispielsweise Mitglied der Gruppe Administratoren ist, kann sie die AdministratorSecrets()-Aktion aufrufen. Alle anderen Benutzer werden zur Anmeldeansicht umgeleitet. Die Roles-Eigenschaft akzeptiert eine durch Trennzeichen getrennte Liste von Rollennamen.
Konfigurieren der Authentifizierung
An diesem Punkt fragen Sie sich möglicherweise, wo die Benutzerkonto- und Rolleninformationen gespeichert werden. Standardmäßig werden die Informationen in einer (RANU) SQL Express-Datenbank namens ASPNETDB.mdf gespeichert, die sich im Ordner App_Data Ihrer MVC-Anwendung befindet. Diese Datenbank wird automatisch vom ASP.NET Framework generiert, wenn Sie mit der Verwendung der Mitgliedschaft beginnen.
Um die Datenbank ASPNETDB.mdf im fenster Projektmappen-Explorer anzuzeigen, müssen Sie zunächst die Menüoption Projekt, Alle Dateien anzeigen auswählen.
Die Verwendung der SQL Express-Standarddatenbank ist beim Entwickeln einer Anwendung in Ordnung. Höchstwahrscheinlich möchten Sie jedoch nicht die Standarddatenbank ASPNETDB.mdf für eine Produktionsanwendung verwenden. In diesem Fall können Sie den Speicherort von Benutzerkontoinformationen ändern, indem Sie die folgenden beiden Schritte ausführen:
- Hinzufügen der Application Services-Datenbankobjekte zu Ihrer Produktionsdatenbank: Ändern Sie die Anwendungsverbindungszeichenfolge so, dass sie auf Ihre Produktionsdatenbank verweist.
Der erste Schritt besteht darin, Ihrer Produktionsdatenbank alle erforderlichen Datenbankobjekte (Tabellen und gespeicherte Prozeduren) hinzuzufügen. Die einfachste Möglichkeit, diese Objekte einer neuen Datenbank hinzuzufügen, besteht darin, den ASP.NET SQL Server-Setup-Assistenten zu nutzen (siehe Abbildung 8). Sie können dieses Tool starten, indem Sie die Visual Studio 2008-Eingabeaufforderung in der Microsoft Visual Studio 2008-Programmgruppe öffnen und den folgenden Befehl an der Eingabeaufforderung ausführen:
aspnet_regsql
Abbildung 8– Der ASP.NET SQL Server-Setup-Assistent
Mit dem ASP.NET SQL Server-Setup-Assistenten können Sie eine SQL Server-Datenbank in Ihrem Netzwerk auswählen und alle Datenbankobjekte installieren, die für die ASP.NET-Anwendungsdienste erforderlich sind. Der Datenbankserver muss sich nicht auf Ihrem lokalen Computer befinden.
Hinweis
Wenn Sie den ASP.NET SQL Server Setup-Assistenten nicht verwenden möchten, finden Sie SQL-Skripts zum Hinzufügen der Datenbankobjekte der Anwendungsdienste im folgenden Ordner:
C:\Windows\Microsoft.NET\Framework\v2.0.50727
Nachdem Sie die erforderlichen Datenbankobjekte erstellt haben, müssen Sie die datenbankverbindung ändern, die von Ihrer MVC-Anwendung verwendet wird. Ändern Sie die ApplicationServices-Verbindungszeichenfolge in Ihrer Webkonfigurationsdatei (web.config), sodass sie auf die Produktionsdatenbank verweist. Beispielsweise verweist die geänderte Verbindung in Listing 3 auf eine Datenbank mit dem Namen MyProductionDB (die ursprüngliche ApplicationServices-Verbindungszeichenfolge wurde auskommentiert).
Eintrag 3 – Web.config
<connectionStrings>
<!--<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>-->
<add name="ApplicationServices" connectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=MyProductionDB" />
</connectionStrings>
Konfigurieren von Datenbankberechtigungen
Wenn Sie integrierte Sicherheit verwenden, um eine Verbindung mit Ihrer Datenbank herzustellen, müssen Sie das richtige Windows-Benutzerkonto als Anmeldung für Ihre Datenbank hinzufügen. Das richtige Konto hängt davon ab, ob Sie den ASP.NET Development Server oder Internetinformationsdienste als Webserver verwenden. Das richtige Benutzerkonto hängt auch von Ihrem Betriebssystem ab.
Wenn Sie den ASP.NET Development Server (den von Visual Studio verwendeten Standardwebserver) verwenden, wird Ihre Anwendung im Kontext Ihres Windows-Benutzerkontos ausgeführt. In diesem Fall müssen Sie Ihr Windows-Benutzerkonto als Datenbankserveranmeldung hinzufügen.
Wenn Sie Internetinformationsdienste verwenden, müssen Sie alternativ entweder das ASPNET-Konto oder das NT AUTHORITY/NETWORK SERVICE-Konto als Datenbankserveranmeldung hinzufügen. Wenn Sie Windows XP verwenden, fügen Sie das ASPNET-Konto als Anmeldung zu Ihrer Datenbank hinzu. Wenn Sie ein neueres Betriebssystem wie Windows Vista oder Windows Server 2008 verwenden, fügen Sie das NT AUTHORITY/NETWORK SERVICE-Konto als Datenbankanmeldung hinzu.
Sie können Ihrer Datenbank mithilfe von Microsoft SQL Server Management Studio ein neues Benutzerkonto hinzufügen (siehe Abbildung 9).
Abbildung 9: Erstellen einer neuen Microsoft SQL Server-Anmeldung
Nachdem Sie die erforderliche Anmeldung erstellt haben, müssen Sie die Anmeldung einem Datenbankbenutzer mit den richtigen Datenbankrollen zuordnen. Doppelklicken Sie auf die Anmeldung, und wählen Sie die Registerkarte Benutzerzuordnung aus. Wählen Sie mindestens eine Datenbankrollen für Anwendungsdienste aus. Um beispielsweise Benutzer zu authentifizieren, müssen Sie die datenbankrolle aspnet_Membership_BasicAccess aktivieren. Um neue Benutzer zu erstellen, müssen Sie die Datenbankrolle aspnet_Membership_FullAccess aktivieren (siehe Abbildung 10).
Abbildung 10: Hinzufügen von Application Services-Datenbankrollen
Zusammenfassung
In diesem Tutorial haben Sie erfahren, wie Sie die Formularauthentifizierung beim Erstellen einer ASP.NET MVC-Anwendung verwenden. Zunächst haben Sie gelernt, wie Sie neue Benutzer und Rollen erstellen, indem Sie das Websiteverwaltungstool nutzen. Als Nächstes haben Sie gelernt, wie Sie das Attribut [Authorize] verwenden, um zu verhindern, dass nicht autorisierte Benutzer Controlleraktionen aufrufen. Schließlich haben Sie gelernt, wie Sie Ihre MVC-Anwendung konfigurieren, um Benutzer- und Rolleninformationen in einer Produktionsdatenbank zu speichern.