ASP.NET von Patrick A. Lorenz 1. Auflage ASP.NET Lorenz schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG Hanser München 2002 Verlag C.H. Beck im Internet: www.beck.de ISBN 978 3 446 22129 1 Inhaltsverzeichnis: ASP.NET Lorenz
CARL HANSER VERLAG Patrick A. Lorenz ASP.NET 3-446-22129-8 www.hanser.de
165 9 Sicherheit 9.1 Basics 9.1.1 Authentication Tabelle 9.1 Die ASP.NET Authentication Provider in der Übersicht Authentication Provider Windows Authentication Beschreibung Bei diesem Verfahren wird die Identifizierung des Besuchers den Internet Information Services (IIS) überlassen. Der Benutzer erhält einen Dialog zur Eingabe seiner Credentials. Diese müssen mit den Daten eines lokal oder in der angegebenen NT-Domäne vorhandenen Benutzers übereinstimmen.
166 9.1 Basics Authentication Provider Forms Authentication Passport Authentication Anonym Beschreibung Dieses System wird von ASP.NET autark angeboten. Beim ersten Aufruf einer geschützten Seite wird der Besucher auf ein Login-Formular umgeleitet. Nach der Eingabe seiner gültigen Credentials wird ein zeitlich limitiertes, so genanntes Ticket erzeugt, das dem Client als Cookie übermittelt wird. Über dieses Cookie kann der Benutzer anschließend auf die geschützten Seiten der Website zugreifen. Microsoft Passport ist ein zentrales Element der.net My Services-Initiative des Konzerns aus Redmont. Die Benutzer registrieren sich einmal bei Microsoft und können sich anschließend mit ihren Credentials bei allen angeschlossenen Websites anmelden. Standardmäßig sind die ASP.NET-Sicherheitsmechanismen ausgeschaltet. Der Zugriff auf die Seiten erfolgt daher unter dem in der Datei machines.config angegebenen Account. Standardmäßig ist dies der Benutzer ASPNET. web.config mode Windows Forms Passport None Listing 9.1 web.config <?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <authentication mode="mode"> </authentication> </system.web> </configuration>
9 Sicherheit 167 9.1.2 Authorization 9.1.3 Impersonation 9.2 Windows Authentication
168 9.2 Windows Authentication 9.2.1 Konfiguration Windows web.config Listing 9.2 web.config <?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <authentication mode="windows"> </authentication> </system.web> </configuration> 9.2.2 Windows Authentication im Einsatz User Page IPrincipal WindowsPrincipal
9 Sicherheit 169 Tabelle 9.2 Die Mitglieder der Klasse WindowsPrincipal Mitglied Rückgabewert Beschreibung E Identity IIdentity Liefert die zugehörige Identity-Klasse mit weiteren Benutzerdaten M IsInRole bool Gibt an, ob der Benutzer Mitglied einer bestimmten Benutzergruppe ist. Bei der Windows Authentication werden die Gruppen des Betriebssystems ausgewertet. Identity WindowsIdentity IIdentity WindowsIdentity Identity = (WindowsIdentity) User.Identity; <% @Import Namespace="System.Security.Principal" %> IsAuthenticated true WindowsIdentity Listing 9.3 default.aspx <script language="c#" runat=server> WindowsIdentity Identity; void Page_Load(object sender, EventArgs e) { Identity = (WindowsIdentity) User.Identity;
170 9.2 Windows Authentication if(identity.isauthenticated) DataBind(); else { Panel1.Visible = false; Panel2.Visible = true; } } </script> <form runat="server"> <ASP:Panel id="panel1" runat="server"> <h1> Hallo <ASP:Label runat="server" Text="<%# Identity.Name %>"/> </h1> <p> Sie wurden erfolgreich über "<ASP:Label runat="server" Text="<%# Identity.AuthenticationType%>"/>" identifiziert! </p> <p> IsAnonymous: <ASP:Label runat="server" Text="<%# Identity.IsAnonymous.ToString() %>"/> <br> IsGuest: <ASP:Label runat="server" Text="<%# Identity.IsGuest.ToString() %>"/> <br> IsSystem: <ASP:Label runat="server" Text="<%# Identity.IsSystem.ToString() %>"/> </p> </ASP:Panel> <ASP:Panel id="panel2" runat="server" visible="false"> <p> Leider konnten Sie nicht identifiziert werden... </p> </ASP:Panel> </form>
9 Sicherheit 171 Abbildung 9.1 Der Besucher wurde erfolgreich authentifiziert. 9.2.3 Gruppenmitgliedschaft überprüfen IsInRole WindowsPrincipal WindowsPrincipal Principal = (WindowsPrincipal) User; bool IsInRole = Principal.IsInRole (WindowsBuiltInRole.Administrator); 9.2.4 Impersonation
172 9.2 Windows Authentication Automatische Impersonation web.config <?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <identity impersonate="true"/> </system.web> </configuration> Statische Impersonation <?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <identity impersonate="true" username="administrator" password="sagichnicht"/> </system.web> </configuration>
9 Sicherheit 173 Dynamische Impersonation WindowsIdentity Page.User.Identity Impersonate WindowsImpersonationContext Undo GetCurrent WindowsIdentity Undo Listing 9.4 default.aspx <% @Import Namespace="System.Security.Principal" %> <script language="c#" runat=server> void Page_Load(object sender, EventArgs e) { WindowsIdentity Identity; // Aktuelle Identität abfragen Identity = WindowsIdentity.GetCurrent(); lb_identity_1.text = Identity.Name; // Impersonation entspricht Windows Authentication WindowsIdentity RequestIdentity = (WindowsIdentity) User.Identity; WindowsImpersonationContext ImpersonationContext = RequestIdentity.Impersonate(); // Aktuelle Identität abfragen Identity = WindowsIdentity.GetCurrent(); lb_identity_2.text = Identity.Name; // Impersonation zurücknehmen ImpersonationContext.Undo();