2010-12-08 22 views
6

J'essaie de sécuriser une application dans IIS7 en utilisant les règles d'autorisation .NET.Règles d'autorisation IIS7/Config - Invite perpétuellement

Par défaut, le serveur Web permet à tous les utilisateurs d'accéder (ce qui est hérité).

J'ai ajouté, juste pour ce répertoire d'application, une commande deny all users, ainsi qu'une commande allow pour des utilisateurs spécifiques.

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

Je l'authentification Windows est activée, et je peux vérifier que sans la ligne que mon REMOTE_USER est MYDOMAIN \ myusername. Cependant, lorsque j'essaye de refuser tous les utilisateurs, je suis invité avec le nom d'utilisateur/mot de passe typique du domaine Windows. Si j'entre le mot de passe du nom d'utilisateur, l'invite revient 3 fois jusqu'à me présenter un message d'erreur. (J'ai également essayé de ne rien faire)

En regardant dans la visionneuse d'événements, il semble que mes informations de connexion en utilisant le nom d'utilisateur et pw ont réussi dans l'audit ... et pour plus tard, mon compte n'est pas verrouillé out (ce qui serait le cas si je ne me connectais pas encore et encore). C'est comme si je me connectais, mais la configuration ne voit pas ce que j'ai saisi comme correspondant à mon identifiant.

Ci-dessous le message que je vois (même lors de la connexion du serveur en utilisant localhost):

** L'accès est refusé. Description: Une erreur s'est produite lors de l'accès aux ressources requises pour répondre à cette demande. Le serveur peut ne pas être configuré pour accéder à l'URL demandée.

Message d'erreur 401.2 .: non autorisé: échec de connexion en raison de la configuration du serveur. Vérifiez que vous avez l'autorisation d'afficher ce répertoire ou cette page en fonction des informations d'identification que vous avez fournies et des méthodes d'authentification activées sur le serveur Web. Contactez l'administrateur du serveur Web pour une assistance supplémentaire. **

+0

De plus, il semble que cette approche soit une approche IIS6 pour ASP.NET. IIS7 L'autorisation est un peu différente. Pour celui-là j'ai basé sur des règles, mais ceux-ci semblent ne rien faire. J'ai ajouté un de et cela ne semble pas nier quoi que ce soit. C'est IIS 7.5 en passant. Étrangement, l'icône Règles d'autorisation .NET est sous ASP.NET et semble suivre l'approche IIS6. Peut-être que l'autorisation IIS7 n'est pas configurée ou installée? – enforge

+0

Il semble que l'autorisation d'URL IIS7 n'est pas installée sur mon système. Au lieu de cela, il y a quelque chose d'autre avec le même nom qui est installé, qui est la version IIS 6 qui fonctionne différemment. Mauvais, vilain Microsoft! Je vais mettre à jour avec une réponse complète si cela conduit à une résolution. – enforge

Répondre

7

Tout d'abord, le principal problème est que IIS6 L'autorisation est également inclus dans IIS7, et au moins dans mon Le cas était le défaut. Tout d'abord, assurez-vous que l'autorisation IIS7 est installée. instructions complètes sont disponibles ici:

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

La confusion se produit parce que IIS7, il y a un élément dans votre menu application appelée « Règles d'autorisation .NET » (dans la section ASP.NET). Ce n'est pas ce que vous voulez pour l'autorisation IIS7. Pour cela, vous devez vous assurer qu'il est installé (voir lien ci-dessus), puis cliquez sur le lien sous la section IIS de votre application intitulée "Règles d'autorisation"

Une autre note vaut la peine d'être mentionnée, si vous mettez la configuration suivante en place:

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

Cela entraînera le refus de tout le monde. Il semble que si vous refusez un nom d'utilisateur ou un rôle qui n'existe pas, tout le monde est refusé. Si l'utilisateur refusé est reconnu, alors cela fonctionne très bien. De plus, spécifier nier pour * et autoriser certains utilisateurs ne fonctionnera pas, il sera refusé pour tous.Vous devez simplement supprimer l'utilisateur * (comme dans mon exemple ci-dessus), puis autoriser uniquement votre public cible. Tout le monde est refusé par défaut.

+0

Merci d'avoir posté la solution! J'ai perdu une demi-journée avant de trouver ça. :) – Benjamin

+0

Pas de problème, content qu'il ait aidé quelqu'un! – enforge

+0

J'ai le même problème, cependant, j'ai l'URL AUthorization installé. C'est vraiment bizarre ... –

0

Pourriez-vous changer votre code comme ci-dessous

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

C'est ce que j'avais à l'origine, mais je n'ai peur de rien. – enforge

0

J'ai passé 4 heures à essayer de mettre en place (pour utiliser le rôle de domaine) :). La solution finale consistait également à utiliser le nom de domaine dans le rôle:

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