Sicherheitsübersicht für ASP.NET
Dieser Artikel enthält eine Einführung in ASP.NET Sicherheit und bezieht sich auf die folgenden Namespaces der Microsoft .NET Framework-Klassenbibliothek:
System.Web.SecuritySystem.Web.Principal
Ursprüngliche Produktversion: ASP.NET
Ursprüngliche KB-Nummer: 306590
Zusammenfassung
ASP.NET bietet Ihnen mehr Kontrolle bei der Implementierung von Sicherheit für Ihre Anwendung. ASP.NET Sicherheit funktioniert in Verbindung mit Internetinformationsdienste (IIS)-Sicherheit und umfasst Authentifizierungs- und Autorisierungsdienste, um das ASP.NET-Sicherheitsmodell zu implementieren. ASP.NET enthält außerdem ein rollenbasiertes Sicherheitsfeature, das Sie sowohl für Windows als auch für Nicht-Windows Benutzerkonten implementieren können.
Dieser Artikel ist in die folgenden Abschnitte unterteilt:
- Flow der Sicherheit mit einer Anforderung
- Verwandte Konfigurations-Einstellungen
- Authentifizierung
- Authorization
- Rollenbasierte Sicherheit
Flow der Sicherheit mit einer Anforderung
In den folgenden Schritten wird die Abfolge von Ereignissen beschrieben, wenn ein Client eine Anforderung sendet:
- Ein Client fordert eine ASPX-Seite an, die sich auf einem IIS-Server befindet.
- Die Anmeldeinformationen des Clients werden an IIS übergeben.
- IIS authentifiziert den Client und leitet das authentifizierte Token zusammen mit der Anforderung des Clients an den ASP.NET Arbeitsprozess weiter.
- Basierend auf dem authentifizierten Token von IIS und den Konfigurationseinstellungen für die Webanwendung entscheidet ASP.NET, ob die Identität eines Benutzers in dem Thread angenommen werden soll, der die Anforderung verarbeitet. In einem eindeutigen Unterschied zwischen Active Server Pages (ASP) und ASP.NET nimmt ASP.NET die Identität des authentifizierten Benutzers nicht mehr standardmäßig an. Um den Identitätswechsel zu aktivieren, müssen Sie das Identitätswechselattribut des Identitätsabschnitts in der dateiWeb.config auf "true" festlegen.
Weitere Informationen zum Sicherheitsfluss finden Sie unter ASP.NET Data Flow.
Weitere Informationen zum Identitätswechsel in ASP.NET finden Sie unter Implementieren des Identitätswechsels in einer ASP.NET Anwendung.
Verwandte Konfigurationseinstellungen
IIS verwaltet sicherheitsbezogene Konfigurationseinstellungen in der IIS-Metabasis. ASP.NET verwaltet jedoch Sicherheitseinstellungen (und andere) Konfigurationseinstellungen in XML-Konfigurationsdateien (Extensible Markup Language). Obwohl dies im Allgemeinen die Bereitstellung Ihrer Anwendung aus Sicherheitsgründen vereinfacht, erfordert das Sicherheitsmodell, das Ihre Anwendung übernimmt, die richtige Konfiguration der IIS-Metabasis und ihrer ASP.NET-Anwendung über die Konfigurationsdatei (Web.config).
Die folgenden Konfigurationsabschnitte beziehen sich auf ASP.NET Sicherheit:
Authentifizierung
Authentifizierung ist der Prozess, mit dem Sie Identifikationsanmeldeinformationen wie den Namen und das Kennwort des Benutzers abrufen und diese Anmeldeinformationen mit einer bestimmten Autorität überprüfen.
ASP.NET bietet vier Authentifizierungsanbieter:
- Formularbasierte Authentifizierung
- Windows-Authentifizierung
- Passport-Authentifizierung
- Standardauthentifizierung
Formularbasierte Authentifizierung
Forms authentication refers to a system in which unauthenticated requests are redirected to a Hypertext Markup Language (HTML) form in which users type their credentials. Nachdem der Benutzer Anmeldeinformationen bereitgestellt und das Formular übermittelt hat, authentifiziert die Anwendung die Anforderung, und das System gibt ein Autorisierungsticket in Form eines Cookies aus. Dieses Cookie enthält die Anmeldeinformationen oder einen Schlüssel zum erneuten Abrufen der Identität. Nachfolgende Anforderungen vom Browser enthalten automatisch das Cookie.
Weitere Informationen zur Formularauthentifizierung finden Sie unter Dem Formularauthentifizierungsanbieter.
Weitere Informationen zur Formularauthentifizierung in ASP.NET finden Sie unter Implementieren der Forms-Based-Authentifizierung in Ihrer ASP.NET-Anwendung mithilfe von C#.NET.
Windows-Authentifizierung
In Windows Authentifizierung führt IIS die Authentifizierung durch, und das authentifizierte Token wird an den ASP.NET Arbeitsprozess weitergeleitet. Der Vorteil der Verwendung Windows Authentifizierung besteht darin, dass eine minimale Codierung erforderlich ist. Sie können Windows Authentifizierung verwenden, um die Identität des Windows Benutzerkontos zu imitieren, das IIS authentifiziert, bevor Sie die Anforderung an ASP.NET übergeben.
Weitere Informationen zur Windows-Authentifizierung finden Sie unter Dem WindowsAuthenticationModule-Anbieter.
Passport-Authentifizierung
Die Passport-Authentifizierung ist ein von Microsoft bereitgestellter zentralisierter Authentifizierungsdienst, der ein einmaliges Anmelden und Kernprofildienste für Mitgliedswebsites anbietet. In der Regel wird die Passport-Authentifizierung verwendet, wenn Sie single sign-in-Funktion über mehrere Domänen hinweg benötigen.
Weitere Informationen zur Passport-Authentifizierung finden Sie unter Passport-Authentifizierungsanbieter.
Standardauthentifizierung
Die Standardauthentifizierung wird verwendet, wenn Sie keine Sicherheit in Ihrer Webanwendung wünschen. Anonymer Zugriff ist für diesen Sicherheitsanbieter erforderlich. Unter allen Authentifizierungsanbietern bietet die Standardauthentifizierung maximale Leistung für Ihre Anwendung. Dieser Authentifizierungsanbieter wird auch verwendet, wenn Sie Ihr eigenes benutzerdefiniertes Sicherheitsmodul verwenden.
Authorization
Autorisierung ist der Prozess, der überprüft, ob der authentifizierte Benutzer Zugriff auf die angeforderten Ressourcen hat.
ASP.NET bietet die folgenden Autorisierungsanbieter:
Dateiautorisierung
Die FileAuthorizationModule Klasse führt die Dateiautorisierung durch und ist aktiv, wenn Sie Windows Authentifizierung verwenden. FileAuthorizationModuleist für die Durchführung von Prüfungen Windows Zugriffssteuerungslisten (Access Control Lists, ACLs) verantwortlich, um festzustellen, ob ein Benutzer Zugriff haben soll.
URL-Autorisierung
Die Klasse führt die UrlAuthorizationModule URL-Autorisierung (Uniform Resource Locator) durch, die die Autorisierung basierend auf dem URI-Namespace (Uniform Resource Identifier) steuert. URI-Namespaces können sich von den von NTFS-Berechtigungen verwendeten physischen Ordner- und Dateipfaden unterscheiden.
UrlAuthorizationModule implementiert sowohl positive als auch negative Autorisierungs assertionen; Das heißt, Sie können das Modul verwenden, um den Zugriff auf beliebige Teile des URI-Namespaces für Benutzer, Rollen (z. B. Manager, Tester und Administratoren) und Verben (z. B. und ) selektiv zuzulassen oder zu GET POST verweigern.
Weitere Informationen zur Autorisierung in ASP.NET finden Sie unter ASP.NET Autorisierung.
Rollenbasierte Sicherheit
Die rollenbasierte Sicherheit in ASP.NET ähnelt der rollenbasierten Sicherheit, die Von Microsoft COM+ und Microsoft Transaction Server (MTS) verwendet wird, obwohl es wichtige Unterschiede gibt. Die rollenbasierte Sicherheit in ASP.NET ist nicht auf Windows Konten und Gruppen beschränkt. Wenn beispielsweise Windows Authentifizierung und Identitätswechsel aktiviert sind, ist die Identität des Benutzers eine Windows Identität ( User.Identity.Name = "Domain\username" ). Sie können Identitäten für die Mitgliedschaft in bestimmten Rollen überprüfen und den Zugriff entsprechend einschränken. Zum Beispiel:
.NET-Code Visual Basic
If User.IsInRole("BUILTIN\Administrators") Then
Response.Write("You are an Admin")
Else If User.IsInRole("BUILTIN\Users") then
Response.Write("You are a User")
Else
Response.Write("Invalid user")
End if
Visual C# .NET-Code
if ( User.IsInRole("BUILTIN\\Administrators"))
Response.Write("You are an Admin");
else if (User.IsInRole("BUILTIN\\Users"))
Response.Write("You are a User");
else
Response.Write("Invalid user");
Wenn Sie die Formularauthentifizierung verwenden, werden dem authentifizierten Benutzer keine Rollen zugewiesen. Sie müssen dies programmgesteuert tun. Um dem authentifizierten Benutzer Rollen zuzuweisen, verwenden Sie das OnAuthenticate Ereignis des Authentifizierungsmoduls (das in diesem Beispiel das Formularauthentifizierungsmodul ist), um ein neues Objekt zu erstellen GenericPrincipal und es der Benutzereigenschaft der zuzuweisen. HttpContext Dies wird im folgenden Code veranschaulicht:
.NET-Code Visual Basic
Public Sub Application_AuthenticateRequest(s As Object, e As EventArgs)
If (Not(HttpContext.Current.User Is Nothing)) Then
If HttpContext.Current.User.Identity.AuthenticationType = "Forms" Then
Dim id as System.Web.Security.FormsIdentity = HttpContext.Current.User.Identity
Dim myRoles(3) As String
myRoles(0)= "managers"
myRoles(1)= "testers"
myRoles(2)= "developers"
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles)
End If
End If
End Sub
Visual C# .NET-Code
public void Application_AuthenticateRequest(Object s, EventArgs e)
{
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.AuthenticationType == "Forms" )
{
System.Web.Security.FormsIdentity id = HttpContext.Current.User.Identity;
String[] myRoles = new String[3];
myRoles[0]= "managers";
myRoles[1]= "testers";
myRoles[2]= "developers";
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles);
}
}
}
Um zu überprüfen, ob der Benutzer in einer bestimmten Rolle ist, und den Zugriff entsprechend einzuschränken, verwenden Sie den folgenden Code (oder ähnlich) auf Ihren ASPX-Seiten:
.NET-Code Visual Basic
If User.IsInRole("managers") Then
Response.Write("You are a Manager")
Else If User.IsInRole("testers") Then
Response.Write("You are a Tester")
Else If User.IsInRole("developers") Then
Response.Write("You are a Developer")
End if
Visual C# .NET-Code
if (User.IsInRole("managers"))
Response.Write("You are a Manager");
else if (User.IsInRole("testers"))
Response.Write("You are a Tester");
else if (User.IsInRole("developers"))
Response.Write("You are a Developer");
Weitere Informationen zur rollenbasierten Sicherheit finden Sie unter rollenbasierte Sicherheit.
References
Weitere allgemeine Informationen zu ASP.NET finden Sie in der folgenden Newsgroup:
Weitere Informationen finden Sie in den folgenden Artikeln oder Büchern:
PRB: Request.ServerVariables("LOGON_USER") gibt eine leere Zeichenfolge in ASP.NET
Reilly, Mof J. Designing Microsoft ASP.NET Applications. Microsoft Press, 2001.
Esposito, Dino. Erstellen von Weblösungen mit ASP.NET und ADO.NET. Microsoft Press, 2001.