2010-12-08 4 views
6

Ich versuche, eine Anwendung in IIS7 mit .NET-Autorisierungsregeln zu sichern.IIS7 Authorization Rules/Config - Perpetually

Standardmäßig ermöglicht der Webserver allen Benutzern den Zugriff (der vererbt wird).

Ich habe hinzugefügt, nur für dieses eine Anwendungsverzeichnis, einen Befehl zum Verweigern aller Benutzer sowie einen Befehl erlauben für bestimmte Benutzer.

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.web> 
     <authorization> 
      <allow users="myusername" /> 
      <deny users="*" /> 
     </authorization> 
    </system.web> 
</configuration> 

Ich habe Windows-Authentifizierung aktiviert ist, und das kann ich überprüfen, ohne die Zeile, die meine REMOTE_USER MYDOMAIN \ myusername ist.

Wenn ich jedoch versuche, alle Benutzer zu verweigern, werde ich mit dem typischen Windows-Benutzername/Passwort-Feld aufgefordert. Wenn ich das Passwort des Benutzernamens eintrage, erscheint die Eingabeaufforderung 3 Mal erneut, bis ich schließlich eine Fehlermeldung erhalten habe. (Ich habe auch vergebens versucht)

In der Ereignisanzeige scheint es, als ob meine Anmeldung mit dem Benutzernamen und PW in der Prüfung erfolgreich war ... und zu diesem Punkt wird mein Konto nicht gesperrt aus (was es wäre, wenn ich mich nicht immer wieder einloggen würde). Es ist also so, als ob ich mich anmelde, aber die Konfiguration sieht nicht, dass das, was ich eingegeben habe, mit meinem Login übereinstimmt.

Unten ist die Botschaft, die ich sehe (auch wenn sie von dem Server mit localhost verbinden):

** Zugriff verweigert.

Beschreibung: Beim Zugriff auf die Ressourcen, die zur Ausführung dieser Anforderung erforderlich sind, ist ein Fehler aufgetreten. Der Server ist möglicherweise nicht für den Zugriff auf die angeforderte URL konfiguriert.

Fehlermeldung 401.2 .: Nicht autorisiert: Anmeldung fehlgeschlagen aufgrund der Serverkonfiguration. Stellen Sie anhand der von Ihnen angegebenen Anmeldeinformationen und der auf dem Webserver aktivierten Authentifizierungsmethoden sicher, dass Sie berechtigt sind, dieses Verzeichnis oder diese Seite anzuzeigen. Kontaktieren Sie den Administrator des Web-Servers für weitere Unterstützung. **

+0

Es scheint auch, dass dieser Ansatz ein IIS6-Ansatz für ASP.NET ist. IIS7 Authorization ist ein bisschen anders. Dafür habe ich basierte Regeln, aber diese scheinen nichts zu tun. Ich habe eines von hinzugefügt und es scheint nichts zu leugnen. Dies ist übrigens IIS 7.5. Seltsamerweise befindet sich das Symbol für .NET-Autorisierungsregeln unter ASP.NET und scheint dem IIS6-Ansatz zu folgen. Vielleicht ist die IIS7-Autorisierung nicht konfiguriert oder installiert? – enforge

+0

Es scheint, dass die IIS7-URL-Autorisierung nicht auf meinem System installiert ist. Es ist stattdessen etwas anderes mit demselben Namen installiert, das die IIS 6-Version ist, die anders funktioniert. Schlechtes, freches Microsoft! Ich werde mit einer vollständigen Antwort aktualisieren, wenn dies zu einer Lösung führt. – enforge

Antwort

7

Als erstes wurde das Hauptproblem, dass IIS6 Autorisierung wird auch in IIS7 enthalten, und zumindest in meinem Fall war der Standardwert. Stellen Sie zuerst sicher, dass Sie IIS7 Authorization installiert haben. Komplette Richtungen sind hier zu finden:

http://www.iis.net/ConfigReference/system.webServer/security/authorization

Die Verwirrung tritt auf, weil in IIS7, da ein Element in Ihrem Anwendungsmenü „.NET-Autorisierungsregeln“ (unter dem ASP.NET-Bereich) genannt wird. Dies ist NICHT, was Sie für die IIS7-Autorisierung möchten. Dafür müssen Sie sicherstellen, dass es installiert ist (siehe Link oben), und klicken Sie dann auf den Link unter dem IIS-Abschnitt Ihrer Anwendung namens "Autorisierungsregeln"

Ein weiterer Hinweis erwähnenswert, wenn Sie die folgende Konfig vorhanden:

<configuration> 
    <system.webServer> 
    <security> 
     <authorization> 
     <remove users="*" roles="" verbs="" /> 
     <add accessType="Deny" users="unknownname" /> 
     <add accessType="Allow" users="knownname" /> 
     </authorization> 
    </security> 
    </system.webServer> 
</configuration> 

Dies wird dazu führen, dass jeder abgelehnt wird. Wenn Sie einen Benutzernamen oder eine Rolle ablehnen, die nicht existiert, wird JEDER abgelehnt. Wenn der verweigerte Benutzer erkannt wird, funktioniert es einwandfrei.

Auch Angabe von deny für * und erlauben für bestimmte Benutzer wird nicht funktionieren, wird es für alle verweigern.Sie müssen einfach den * Benutzer (wie in meinem Beispiel oben) entfernen und dann nur Ihre Zielgruppe zulassen. Alle anderen werden standardmäßig abgelehnt.

+0

Danke für die Lösung! Ich habe einen halben Tag verschwendet, bevor ich das gefunden habe. :) – Benjamin

+0

Kein Problem, froh, dass es jemandem geholfen hat! – enforge

+0

Ich habe das gleiche Problem, aber ich habe URL AUTHORIZATION installiert. Das ist wirklich komisch ... –

0

Könnten Sie Ihren Code ändern, wie unten

<deny users="*" /> 
<allow users="myusername" /> 
+0

Das ist, was ich ursprünglich hatte, aber es macht keinen Unterschied, fürchte ich. – enforge

0

Ich verbrachte 4 Stunden versuchen, dies einzurichten (Domain-Rolle zu verwenden) :). Endgültige Lösung war, Domänenname in der Rolle auch zu verwenden:

`<system.web> 
    <authorization> 
    <allow roles="DOMAINNAME\rolename" /> 
    <deny users="*" /> 
    </authorization> 
</system.web>`