2009-06-13 2 views
3

Ich experimentiere mit dem integrierten Authentifizierungsmodus für statischen Inhalt in IIS7. Ich befolgte die Anweisungen in diesem Artikel: http://aspnet.4guysfromrolla.com/articles/122408-1.aspx Es funktioniert gut, wenn ich den Zugriff durch den Login-Status erlauben/verweigern (wie im Artikel). Allerdings möchte ich den Zugriff basierend auf Rollen zulassen/verweigern (unter Verwendung des ASP.NET-basierten Rollenanbieters). Wenn ich eine Zulassungsregel für die Rolle "Admin" in der web.config- und lease-Regel für alle anderen Benutzer hinterlasse, kann ich nicht auf die statischen Dateien zugreifen, selbst wenn ich mich als Administrator anmelde. Derselbe Ordner enthält nicht statischen Inhalt (aspx-Seiten), auf den basierend auf den Informationen des Rollenanbieters problemlos zugegriffen werden kann.ASP.NET-Authentifizierung mit Rollen im integrierten IIS7-Modus für statischen Inhalt

Irgendwelche Ideen?

+0

Können Sie uns Ihre web.config zeigen? –

Antwort

5

Versuchen Hinzufügen Sie folgendes zu Ihrem <system.webServer> <modules> Block:

<configuration> 
    <system.webServer> 
    <modules> 
     <remove name="FormsAuthentication" /> 
     <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" /> 
     <remove name="UrlAuthorization" /> 
     <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" /> 
     <remove name="DefaultAuthentication" /> 
     <add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" /> 
     <remove name="RoleManager" /> 
     <add name="RoleManager" type="System.Web.Security.RoleManagerModule" /> 
    </modules> 
    </system.webServer> 
</configuration> 

Die RoleManager Bit ist der Schlüssel, und es ist nicht in einem der Online-Beispiele enthalten, die ich finden konnte. Andernfalls wird die Rollenmitgliedschaft des Benutzers nicht für statischen Inhalt initialisiert, sodass die rollenbasierte Autorisierung immer fehlschlägt.

(Disclaimer: Ich lege mich auf mein begrenztes Verständnis von IIS gestückelt habe dies zusammen basiert, aber es scheint zu funktionieren.)

bearbeiten (als Antwort auf Ihren Kommentar): Sorry, ich nicht wissen viel darüber, wie RoleManager von anderen Modulen abhängt. Sie können die Standard-IIS-Konfiguration anzeigen, indem Sie c:\Windows\System32\inetsrv\config\applicationHost.config ansehen (zumindest ist das die Vergangenheit auf meinem Windows Vista-Computer), um die Reihenfolge zu sehen, in der Module geladen werden (beachten Sie die Verwendung von managedHandler, um RoleManager standardmäßig auf nicht statischen Inhalt zu beschränken) und MSDN deckt RoleManagerModule zusammen mit dem Rest der Module in dem System.Web.Security-Namespace ab, so dass Sie wahrscheinlich finden könnten, was Sie dort benötigen.

+0

Vielen Dank für Ihre Antwort Ich werde sicherstellen, dass es in diesen Tagen zu testen. – Stilgar

+0

Es hat funktioniert. Danke noch einmal. Kannst du ein wenig mehr darüber erzählen, wie der RoleManager von den anderen Modulen abhängt? Ich habe festgestellt, dass, wenn ich die anderen Module nicht entferne/hinzufüge, irgendwo in der Pipeline eine Null-Referenz-Ausnahme zu sein scheint. – Stilgar

0

Ich würde sagen, dass die wahrscheinlichste Ursache ist, dass die statischen Dateien werden in IIS nicht von ASP.NET verarbeitet werden, sondern werden überlassen.

Funktioniert es, wenn Sie ein Maskierungsskript hinzufügen?

+0

Was schlagen Sie vor, als Platzhalter-Skriptzuordnung hinzuzufügen? und wenn dies der Fall ist, funktioniert die Authentifizierung basierend auf dem Login-Status, aber nicht die Rollen? – Stilgar