2009-06-13 7 views
3

J'expérimente le mode d'authentification intégré pour le contenu statique dans IIS7. J'ai suivi les instructions dans cet article: http://aspnet.4guysfromrolla.com/articles/122408-1.aspx Cela fonctionne très bien si j'autorise/refuse l'accès par l'état de connexion (comme dans l'article). Cependant, je veux autoriser/refuser l'accès en fonction des rôles (en utilisant ASP.NET intégré dans Roles Provider). Lorsque je mets une règle d'autorisation pour le rôle "Admin" dans le fichier web.config et refuse la règle pour tous les autres utilisateurs, je ne peux pas accéder aux fichiers statiques même lorsque je me connecte en tant qu'administrateur. Le même dossier contient un contenu non statique (pages aspx) auquel on accède simplement en fonction des informations du fournisseur de rôles.Authentification ASP.NET avec des rôles en mode intégré IIS7 pour le contenu statique

Des idées?

+0

Pouvez-vous nous montrer votre web.config? –

Répondre

5

Essayez d'ajouter ce qui suit à votre <system.webServer> <modules> bloc:

<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> 

Le bit est RoleManager clé, et il ne figure dans aucun des exemples en ligne que je pouvais trouver. Sans cela, l'appartenance au rôle de l'utilisateur n'est pas initialisée pour le contenu statique, donc l'autorisation basée sur le rôle échouera toujours.

(Disclaimer: J'ai rapiécé cela ensemble moi-même basée sur ma compréhension limitée de IIS, mais il semble fonctionner.)

Modifier (en réponse à votre commentaire): Désolé, je ne En savoir plus sur la manière dont RoleManager dépend d'autres modules Vous pouvez voir la configuration IIS par défaut en regardant c:\Windows\System32\inetsrv\config\applicationHost.config (au moins, c'est le passé sur mon ordinateur Windows Vista) pour voir l'ordre dans lequel les modules sont chargés (notez l'utilisation de managedHandler par défaut pour restreindre RoleManager au contenu non statique) , et MSDN couvre RoleManagerModule avec le reste des modules dans l'espace de noms System.Web.Security, de sorte que vous pourriez probablement trouver ce dont vous avez besoin là.

+0

Merci pour votre réponse Je vais m'assurer de le tester ces jours-ci. – Stilgar

+0

Ça a marché. Merci encore. Pouvez-vous partager un peu plus d'informations sur la façon dont RoleManager dépend des autres modules. J'ai remarqué que si je ne supprime/ajoute pas les autres modules, il semble y avoir une exception de référence nulle quelque part dans le pipeline. – Stilgar

0

Je dirais que le problème le plus probable est que les fichiers statiques ne sont pas traités par ASP.NET mais laissés à IIS.

Est-ce que cela fonctionne si vous ajoutez un mappage de script générique?

+0

Que suggérez-vous d'ajouter en tant que mappage de script générique? et si tel est le cas, pourquoi l'authentification basée sur l'état de connexion fonctionne-t-elle mais pas les rôles? – Stilgar