2009-09-22 6 views
3

Je travaille sur une application ASP.NET 3.5 exécutée sur IIS7 (Server '08) en utilisant l'authentification MS Forms en stock et SqlRolesProvider. (J'ai utilisé l'outil aspnet_regsql pour générer les tableaux).Mise en œuvre de la sécurité des rôles ASP.NET 3.5 IIS7

Nous avons trois rôles: SysAdmins, AppAdmins et Utilisateurs. Tous les utilisateurs sont dans Utilisateurs et un utilisateur peut être Administrateur système, Administrateur d'application ou les deux.

Je n'arrive pas à obtenir un répertoire Admin pour bloquer l'accès aux utilisateurs qui ne se trouvent pas dans SysAdmins et AppAdmins. Soit il laisse entrer tous les utilisateurs connectés, soit personne.

Voici les bits correspondants de ma configuration actuelle:

<configuration> 
    ... 
    <system.web> 
    <authentication mode="Forms"> 
     <forms loginUrl="/client/security/login.aspx" timeout="480" /> 
    </authentication> 
    <authorization> 
    </authorization> 
    <roleManager defaultProvider="SqlRoleProvider" enabled="true" cacheRolesInCookie="true" cookieName="EquityTouch.Roles" cookieProtection="All" cookieSlidingExpiration="true" cookieTimeout="60"> 
     <providers> 
     <clear /> 
     <add name="SqlRoleProvider" applicationName="EquityTouch" connectionStringName="SQLProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
     </providers> 
    </roleManager> 
    ... 
    </system.web> 
    <system.webServer> 
    <security> 
     <authorization> 
     <add accessType="Deny" users="?" /> 
     </authorization> 
    </security> 
    ... 
    </system.webServer> 
    <location path="admin"> 
    <system.webServer> 
     <security> 
     <authorization> 
      <remove users="*" roles="" verbs=""/> 
      <add accessType="Allow" roles="SysAdmins,AppAdmins" /> 
     </authorization> 
     </security> 
    </system.webServer> 
    <system.web> 
     <authorization> 
     <deny users="*"/> 
     <allow roles="SysAdmins,AppAdmins"/> 
     </authorization> 
    </system.web> 
    </location> 
</configuration> 

Je crois que cette configuration de tout le monde actuellement blocs. J'ai fait des configurations similaires qui ne bloquent personne.

Je pense que le problème réside dans l'utilisation des sections system.web et system.webserver. Toute aide pour que cette configuration fonctionne correctement serait grandement appréciée.

MISE À JOUR

Retrait de la <system.webServer> section de l'emplacement < élément > rend les pages .aspx dans ce dossier correctement retour! Malheureusement, les fichiers .js dans ce dossier sont toujours bloqués à tous les utilisateurs ... Idéalement, je voudrais verrouiller les fichiers .js ainsi que des yeux non privilégiés. Donc, je cherche encore de l'aide.

+0

Ce problème est le même: http://stackoverflow.com/questions/991045/asp-net-authentication-with-roles-in-iis7-integrated-mode-for-static-content – Toby

Répondre

6

Même en mode Pipeline intégré IIS7, j'utilise avec succès les anciens blocs d'autorisation de type IIS6. S'il vous plaît essayez le code ci-dessous, qui comprend les modifications suivantes:

  1. Ajouté < deny users = "?"/> à la première autorisation bloc
  2. Switched l'ordre de <permettent> et <nie> dans le bloc d'autorisation spécifique à l'emplacement
  3. Suppression <system.webServer> blocs d'autorisation spécifiques à l'emplacement
  4. Pour permettre aux fichiers js par le biais, mon meilleur conseil est de les déplacer dans un dossier séparé et de permettre à tous, sauf aux anonymes, d'accéder à ce dossier (voir ci-dessous). Alternativement, vous pouvez nommer chaque fichier js dans l'attribut de chemin de l'emplacement. Cette solution est moins maintenable, cependant.

S'il vous plaît laissez-moi savoir si cela fonctionne pour vous!

<configuration> 
    <system.web> 
    <authentication mode="Forms"> 
     <forms loginUrl="/client/security/login.aspx" timeout="480" /> 
    </authentication> 
    <authorization> 
     <deny users="?"/> 
    </authorization> 
    <roleManager defaultProvider="SqlRoleProvider" enabled="true" cacheRolesInCookie="true" cookieName="EquityTouch.Roles" cookieProtection="All" cookieSlidingExpiration="true" cookieTimeout="60"> 
     <providers> 
     <clear /> 
     <add name="SqlRoleProvider" applicationName="EquityTouch" connectionStringName="SQLProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
     </providers> 
    </roleManager> 
    </system.web> 

    <location path="admin"> 
    <system.web> 
     <authorization> 
     <allow roles="SysAdmins,AppAdmins"/> 
     <deny users="*"/>    
     </authorization> 
    </system.web> 
    </location> 
    <location path="js"> 
    <system.web> 
     <authorization> 
     <deny users="?"/> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
    </location> 
</configuration> 
+0

Merci Noah : Je suppose que la sécurité par rôle dans le pipeline intégré ne fonctionne tout simplement pas correctement. L'utilisation de la section .NET system.web permet au moins de garder le rifraff hors des pages aspx importantes, même si les fichiers statiques ne sont pas protégés. – Toby

+1

Vous venez de lire un article de blog qui semble indiquer que les rôles sont pris en charge par l'autorisation d'URL IIS 7: http://mvolo.com/blogs/serverside/archive/2009/05/11/Workaround-for-using-IIS -7-url-autorisation-avec-ASP.NET-roles.aspx –

+0

Je vais jeter un coup d'oeil à cette volonté! Bonne trouvaille! – Toby

Questions connexes