Freigeben über


Grundlegendes zur IIS 7.0-URL-Autorisierung

von Saad Ladki

Einführung

Die Autorisierung war in früheren Versionen von Internetinformationsdiensten (Internet Information Services, IIS) schwierig. Da IIS nur mit Windows-Identitäten funktionierten, mussten Sie zum Dateisystem wechseln und Zugriffssteuerungslisten (Access Control Lists, ACLs) für Dateien und Verzeichnisse festlegen. Dies war mühsam, da die ACL-Benutzeroberfläche komplex ist und Autorisierungsregeln nicht sehr gut von Computer zu Computer kopiert werden.

IIS 7.0 und höhere Versionen verwenden die URL-Autorisierung. Auf diese Weise können Sie Autorisierungsregeln für die tatsächliche URL anstelle der zugrunde liegenden Dateisystemressource festlegen. Darüber hinaus wird die IIS-URL-Autorisierungskonfiguration in web.config-Dateien gespeichert. Sie können Autorisierungsregeln mit dem Anwendungsinhalt verteilen. In der folgenden exemplarischen Vorgehensweise wird das IIS-URL-Autorisierungsfeature in Windows Server® 2008 Beta 3 und Windows Vista Service Pack 1 erläutert.

Voraussetzungen

Für diese exemplarische Vorgehensweise ist zusätzlich zur Standardinstallation die Installation der folgenden oben aufgeführten IIS-Features erforderlich:

  • „ASP.NET“ unter „Internetinformationsdienste“ – „WWW-Dienste“ – „Anwendungsentwicklungsfeatures“
  • „URL-Autorisierung“ unter „Internetinformationsdienste“ – „WWW-Dienste“ – „Sicherheit“

Szenario

Im Szenario für diesen Artikel verfügen Sie über ein sicheres Verzeichnis, auf das nur Alice, Bob und die Administratorengruppe zugreifen kann. In diesem Verzeichnis befindet sich eine Datei namens „bobsSecret.aspx“, auf die nur Bob zugreifen soll.

Szenariosetup

Für dieses Szenario werden die drei Benutzer Alice, Bob und Fred benötigt. Zudem ist eine neue Gruppe namens „BobAndFriends“ erforderlich, der Alice und Bob angehören. Erstellen Sie die drei Konten und die Gruppe über den Windows-Benutzer-Manager, oder starten Sie eine Eingabeaufforderung mit erhöhten Rechten, und geben Sie die folgenden Befehle ein.

net user Alice <password_of_your_choice> /add
net user Bob <password_of_your_choice> /add
net user Fred <password_of_your_choice> /add
net localgroup BobAndFriends /add
net localgroup BobAndFriends Alice /add
net localgroup BobAndFriends Bob /add
  1. Öffnen Sie den Explorer, und navigieren Sie zum Verzeichnis %systemdrive%\inetpub\wwwroot.

  2. Erstellen Sie ein Verzeichnis namens „secure“.

  3. Wechseln Sie zum Verzeichnis „secure“, und erstellen Sie eine neue Datei namens „default.aspx“. Sie können dies mit Editor oder einem beliebigen anderen Text-Editor tun.

  4. Fügen Sie den folgenden Code auf der default.aspx-Seite ein:

    <%@Language="C#"%>
    <%
        string currentUser = Request.ServerVariables["LOGON_USER"];
        if (currentUser == "")
            currentUser = "anonymous";
        Response.Write("<b>Current User:</b> " + currentUser);
    %>
    
  5. Erstellen Sie eine weitere Datei namens „bobsSecret.aspx“, und fügen Sie den folgenden Code ein:

    <%@Language="C#"%>
    <%
       string currentUser = Request.ServerVariables["LOGON_USER"];
        if (currentUser == "")
            currentUser = "anonymous";
        Response.Write("<b>Current User:</b> " + currentUser);
    Response.Write("
    <b>My secret:</b> I used Apache before I discovered IIS7.</b> ");
    %>
    
  6. Testen Sie nun, ob die beiden Webseiten funktionieren, indem Sie http://localhost/secure/ und http://localhost/secure/bobsSecret.aspx anfordern.

Konfigurieren der Authentifizierung

Im Rahmen der Authentifizierung wird beantwortet, „wer“ Zugriff haben möchte. Mit dem Autorisierungsprozess wird geprüft, „ob“ die authentifizierte Person tatsächlich Zugriff erhält. Bevor Sie also mit der URL-Autorisierung experimentieren können, müssen Sie die Authentifizierung aktivieren, da nicht entschieden werden kann, ob eine Person Zugriff erhält, wenn nicht klar ist, um welche Person es sich überhaupt handelt.

  1. Starten Sie INETMGR, indem Sie „INETMGR“ im Menü „Suche starten“ eingeben.

  2. Öffnen Sie den Computerknoten in der linken Strukturansicht, öffnen Sie dann den Knoten „Standardwebsite“, und wählen Sie das Verzeichnis „secure“ aus.

  3. Doppelklicken Sie auf „Authentifizierung“.

  4. Deaktivieren Sie „Anonyme Authentifizierung“, und aktivieren Sie „Standardauthentifizierung“.

  5. Fordern Sie nun erneut http://localhost/secure und http://localhost/secure/bobsSecret.aspx an. Sie werden aufgefordert, Anmeldeinformationen einzugeben. Geben Sie „Alice“ als Benutzername und das entsprechende Kennwort ein. Sie werden als „Alice“ authentifiziert.

    Hinweis

    Wenn Sie den Internet Explorer verwenden, können Sie STRG+F5 drücken, damit der Internet Explorer die zwischengespeicherte Version der ASP.NET-Seite aktualisiert.

Konfigurieren der URL-Autorisierung

Schützen Sie nun die beiden Seiten, sodass nur Alice und Bob Zugriff haben:

  1. Doppelklicken Sie erneut auf das Webverzeichnis „secure“, und wählen Sie „Autorisierungsregeln“ aus.

  2. Entfernen Sie die Regel „Alle Benutzer zulassen“.

  3. Klicken Sie auf „Zulassungsregel hinzufügen“, wählen Sie das Optionsfeld „Bestimmte Rollen oder Benutzergruppen“ aus, fügen Sie „BobAndFriends“ hinzu, und klicken Sie auf die Schaltfläche „OK“.

    Screenshot showing Add Allow Authorization Rule panel with selection of Specified roles or user groups.

  4. Schließen Sie alle Internet Explorer-Fenster, da der Internet Explorer die Anmeldeinformationen zwischenspeichert, die Sie im vorherigen Schritt eingegeben haben.

  5. Öffnen Sie den Internet Explorer, und versuchen Sie, mithilfe der Anmeldeinformationen von Fred auf die Seite zuzugreifen. Sie erhalten keinen Zugriff.

  6. Testen Sie dies nun mit den Anmeldeinformationen von Bob oder Alice. Sie erhalten Zugriff.

Konfigurieren der URL-Autorisierung für eine einzelne Webseite

Sie haben nach wie vor das Problem, dass Alice weiterhin auf „BobsSecret.aspx“ zugreifen kann. Sie können dies wie folgt beheben:

  1. Doppelklicken Sie erneut auf das Webverzeichnis „secure“, und wählen Sie unten auf der Seite „Inhaltsansicht“ aus.

  2. Eine Liste der Dateien wird im secure-Ordner angezeigt („default.aspx“ und „bobsSecret.aspx“).

  3. Klicken Sie mit der rechten Maustaste auf „bobsSecret.aspx“, und wählen Sie „Featureansicht“ aus.

    Screenshot showing contents of Secure web directory including default dot a s p x and bobsSecret dot a s p x.

  4. Jetzt nehmen Sie wie in der Statusleiste angegeben nur Änderungen für die bobsSecret.aspx-Seite vor.

  5. Wählen Sie erneut „Autorisierungsregeln“ aus. Die geerbten Einstellungen werden angezeigt. Dies bedeutet, dass die Gruppe „BobAndFriends“ auf „bobsSecret.aspx“ zugreifen darf.

  6. Entfernen Sie die Regel „BobAndFriends“.

  7. Klicken Sie jetzt auf „Zulassungsregel hinzufügen“.

  8. Klicken Sie auf das Optionsfeld „Bestimmte Benutzer:“, geben Sie „Bob“ ein, und klicken Sie auf „OK“.

    Screenshot showing Add Allow Authorization Rule panel with Specified users selected.

  9. Schließen Sie alle Internet Explorer-Fenster, und fordern Sie http://localhost/secure/bobsSecret.aspx an.

  10. Nur durch die Eingabe von Bobs Anmeldeinformationen erhalten Sie Zugriff.

Weiterführende Themen zur URL-Autorisierung

Die nächsten Absätze enthalten einige weiterführende Themen zur URL-Autorisierung.

Konfiguration

Sie müssen die Benutzeroberfläche nicht verwenden, um URL-Autorisierungseinstellungen anzugeben. Sie können URL-Autorisierungsregeln direkt in der web.config-Datei angeben. Der IIS-Konfigurationsabschnitt <authorization> wird standardmäßig delegiert. Sie können Autorisierungsregeln zusammen mit Webinhalten verteilen. Hier sehen Sie, wie die %systemdrive%\inetpub\wwwroot\secure\web.config-Datei nach dem Ausführen der Schritte dieser exemplarischen Vorgehensweise aussieht:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
        <security> 
            <authorization> 
                <remove users="*" roles="" verbs="" /> 
        <add accessType="Allow" roles="BobAndFriends" />             

            </authorization> 
        </security> 
    </system.webServer> 
    <location path="bobsSecret.aspx"> 
        <system.webServer> 
            <security> 
                <authorization> 
                    <remove users="" roles="BobAndFriends" verbs="" /> 
                    <add accessType="Allow" users="Bob" />                  

                </authorization> 
            </security> 
        </system.webServer> 
    </location> 
</configuration>

Unterschiede zwischen der ASP.NET-URL-Autorisierung und der IIS-URL-Autorisierung

Es gibt kleine, aber wichtige Unterschiede zwischen „UrlAuthorization“ für ASP.NET und der IIS-URL-Autorisierung. Beide Module können über das IIS-Setup installiert werden. Die IIS-URL-Autorisierung wird installiert, wenn Sie das Feature „URL-Autorisierung“ über die Benutzeroberfläche des IIS-Setups installieren:
Screenshot of Window Features showing URL Authorization box checked.

Die ASP.NET-URL-Autorisierung wird installiert, wenn Sie ASP.NET zusätzlich zu IIS installieren. Wenn Sie mit ASP.NET vertraut sind, erinnern Sie sich daran, dass „UrlAuthorization“ für ASP.NET im System.Web.Security.UrlAuthorizationModule-Modul implementiert wird. Der entsprechende Konfigurationsabschnitt ist „system.web/authorization“. Dies ist der Konfigurationseintrag.

<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="managedHandler" />

Das IIS-URL-Autorisierungsmodul wird im globalen Modul „urlauthz.dll“ implementiert.

<add name="UrlAuthorizationModule" image="%windir%\System32\inetsrv\urlauthz.dll" />

Es ist wichtig zu beachten, dass sich die managedHandler-Vorbedingung im ASP.NET-Modul „UrlAuthorization“ befindet. Die Vorbedingung teilt Ihnen mit, dass das URL-Autorisierungsmodul nur aufgerufen wird, wenn der Code, der die Anforderung verarbeitet, verwaltetem Code zugeordnet ist (in der Regel eine ASPX- oder ASMX-Seite). Die IIS-URL-Autorisierung gilt dagegen für alle Inhalte. Sie können die managedHandler-Vorbedingung aus dem ASP.NET-Modul „UrlAuthorization“ entfernen. Auf diese Weise soll verhindert werden, dass Sie Leistungseinbußen hinnehmen müssen, wenn jede Anforderung (z. B. Anforderung von HTML- oder JPG-Seiten) verwalteten Code durchlaufen muss.

Regelauswertung

Es gibt auch Unterschiede in der Reihenfolge, in der IIS und die beiden URL-Autorisierungsmodule Autorisierungsregeln auswerten. Die ASP.NET-URL-Autorisierung ist entwicklerorientiert, und Entwickler haben volle Kontrolle darüber, welche Regeln sie festlegen. Die IIS-URL-Autorisierung behält den Administrator im Auge und versucht sicherzustellen, dass Entwickler die Regeln nicht außer Kraft setzen können, die Administratoren festgelegt haben.

Beispiel

Angenommen, die Administratoren möchten sicherstellen, dass alle Benutzer einer bestimmten Website authentifiziert werden müssen. Legen Sie dazu die folgende Konfiguration im Website-Stammverzeichnis fest:

<authorization lockElements="clear"> 
    <add accessType="Deny" users="?" /> 
</authorization>

Diese Konfiguration verweigert den Zugriff für anonyme Benutzer (? = anonyme Benutzer, * = alle Benutzer). Mit „lockElements="clear"“ stellen Sie sicher, dass keine Person mit niedrigen Berechtigungen die Vererbung dieser Einstellung löschen kann. Ihre Einstellung würde an alle Anwendungen und virtuellen Verzeichnisse dieser Website vererbt werden. Es tritt eine Sperrverletzung auf, wenn Sie versuchen, die Anweisung „<clear/>“ bei niedrigeren Berechtigungen zu verwenden.

Weitere Informationen zur Konfigurationssperre finden Sie unter Sperren von ASP.NET-Konfigurationseinstellungen.

Sie können das clear-Element auch bei der ASP.NET-URL-Autorisierung sperren. Das Problem besteht darin, dass die ASP.NET-URL-Autorisierung Autorisierungsregeln von unten nach oben auswertet, d. h. sie wertet zuerst Regeln in der aktuellen web.config-Datei aus, bevor sie übergeordnete Regeln auswertet. Sobald eine Übereinstimmung gefunden wird, wird der Zugriff gewährt oder verweigert. Im obigen Beispiel können Sie anonymen Benutzern weiterhin Zugriff gewähren, indem Sie „<add users="?"/>“ als Autorisierungsregel in der web.config-Datei unter „secure“ angeben. Da sie zuerst ausgewertet wird, würden anonyme Benutzer Zugriff erhalten.

Das IIS-URL-Autorisierungsmodul wertet zuerst die Ablehnungsregeln aus. Da Sie den Zugriff für anonyme Benutzer verweigern, können Sie diese Regel nicht einfach außer Kraft setzen. Der andere große Unterschied besteht darin, dass übergeordnete Regeln zuerst ausgewertet werden. Dies bedeutet, dass Sie Fred den Zugriff auf niedriger Ebene nicht gewähren können, wenn Sie den Fred den Zugriff auf höherer Ebene verweigern.

Tabelle zu den Unterschieden

Differenz ASP.NET-URL-Autorisierungsverhalten IIS-URL-Autorisierungsverhalten
Regelauswertung Reihenfolge: a) Von niedrigerer Ebene nach oben zum übergeordneten Element b) Reihenfolge gemäß Anordnung in Regelsammlung Reihenfolge: a) Verweigerungsregeln werden zuerst ausgewertet, beginnend mit dem übergeordneten Element b) Zulassungsregeln werden ausgewertet, beginnend mit dem übergeordneten Element c) Reihenfolge gemäß Anordnung in Regelsammlung
IIS-Benutzeroberfläche Keine IIS-Benutzeroberfläche Benutzeroberfläche „Autorisierungsregeln“
Konfigurationsabschnitt system.web/authorization system.webServer/security/authorization
Modul System.Web.Security.UrlAuthorization %windir%\system32\inetsrv\urlauthz.dll
Inhalt Gilt nur für Inhalte, die einem verwalteten Handler zugeordnet sind (kann über die managedHandler-Vorbedingung deaktiviert werden) Gilt für alle Inhalte

Verwenden von Domänenkonten und -gruppen

Sie müssen Domänenkonten und -gruppen wie folgt angeben:

<domainname or username>\<user>

In diesem Beispiel wird der Computername verwendet. Dabei wird vorausgesetzt, dass die Konten auf dem Computer „iis7test“ erstellt wurden:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
        <security> 
            <authorization> 
                <remove users="*" roles="" verbs="" /> 
                <add accessType="Allow" roles="iis7test\BobAndFriends" />             

            </authorization> 
        </security> 
    </system.webServer> 
    <location path="bobsSecret.aspx"> 
        <system.webServer> 
            <security> 
                <authorization> 
                    <remove users="" roles="iis7test\BobAndFriends" verbs="" /> 
                    <add accessType="Allow" users="iis7test\Bob" />                  

                </authorization> 
            </security> 
        </system.webServer> 
    </location> 
</configuration>

Verwenden von Nicht-Windows-Identitäten

Die URL-Autorisierung gilt nicht nur für Windows-Identitäten. Sie funktioniert auch gut für Nicht-Windows-Identitäten. Verwenden Sie sie zusammen mit ASP.NET-Mitgliedschaften und -Rollen und für benutzerdefinierte Identitäten, falls Sie Ihr eigenes Authentifizierungsmodul schreiben.

Zusammenfassung

Die URL-Autorisierung ist eine leistungsstarke neue Möglichkeit zum Angeben von Autorisierungsregeln für Webanwendungen. Jetzt können Sie Regeln in XML angeben, ohne Windows-Zugriffssteuerungslisten zu verwenden.