Question

Je travaille sur un outil Web interne pour mon entreprise.Une partie de cet outil est une autre application (le tableau de bord Cruise Control) qui s'exécute dans son propre répertoire virtuel sous mon application racine.

Je voulais limiter l'accès à cette application interne en y configurant l'authentification par formulaire et en disposant d'un formulaire de connexion dans l'application racine.

J'ai mis ce qui suit dans le fichier web.config des applications racine :

<location path="ccnet">
  <system.web>
    <authentication mode="Forms">
        <forms loginUrl="/default.aspx" timeout="5000"/>
    </authentication>
    <authorization>
      <allow users="?"/>
      <deny users="?"/>
    </authorization>        
  </system.web>    
</location>

Cependant, l'authentification par formulaire ne semble pas fonctionner, elle ne redirige pas vers la page de connexion lorsque j'accède directement à cette application.

J'ai le sentiment que les balises <allow> et <deny> sont mal définies.Quelqu'un peut-il clarifier ?

Était-ce utile?

La solution

Vous devrez peut-être également mettre path="/" dans la ou les balises <forms, je pense.Désolé, ça fait un moment que je n'ai pas fait ça

Autres conseils

Vous devrez peut-être également mettre path="/" dans le

C'était ça!

Donc, résumé, pour faire cela ;

Dans la racine web.config, ajoutez :

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />

Cela doit être fait car par défaut il s'agit de "AutoGenerate,IsolateApps".

Deuxièmement, vous devez nommer le cookie d'authentification du formulaire de la même manière dans les deux cas. J'ai tout fait dans ma racine, en utilisant la balise de localisation :

<authentication mode="Forms">
   <forms name="ccAuth" loginUrl="/default.aspx"  path="/" timeout="5000"/>
</authentication>
<authorization>
   <deny users="?"/>
</authorization>

Enfin:

<location path="ccnet">
  <system.web>
    <authentication mode="Forms">
      <forms name="ccAuth" loginUrl="/default.aspx"  path="/" timeout="5000"/>
    </authentication>
    <authorization>
      <deny users="?"/>
    </authorization>      
  </system.web>    
</location>

Merci à tous pour votre aide.C’était une perplexité.

FormsAuthentication crypte les jetons qu'il donne à l'utilisateur et, par défaut, crypte des clés différentes pour chaque application.Pour que Forms Auth fonctionne dans toutes les applications, vous devez effectuer plusieurs opérations :

Tout d’abord, définissez le « nom » d’authentification des formulaires de la même manière sur toutes les applications.Cela se fait avec :

<authentication mode="Forms">  
    <forms name="{name}" path="/" ...>
</authentication>

Définissez le "nom" pour qu'il soit le même dans les deux applications web.configs.

Deuxièmement, vous devez indiquer aux deux applications d'utiliser la même clé lors du cryptage.C'est un peu déroutant.Lorsque j'ai configuré cela, tout ce que j'avais à faire était d'ajouter ce qui suit aux deux web.configs :

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />

D'après la documentation, c'est la valeur par défaut, mais cela n'a pas fonctionné pour moi sauf si je l'ai spécifié.

Cela ne fonctionne pas, cela permet toujours à tous les utilisateurs (authentifiés ou non) d'accéder.

Je pense que vous pourriez même omettre la balise d'autorisation, car elle est redondante.Juste:

<deny users="?"/>

Où se situe ce code, Jonathan ?D'après mon expérience, j'ai un contrôle de connexion et dans l'événement OnAuthenticate, je définirais Authenticated sur false...

If CustomAuthenticate(Login1.UserName, Login1.Password) Then
    FormsAuthentication.RedirectFromLoginPage(Login1.UserName, False)
Else
    e.Authenticated = False
End If

Mais cela utilise le Méthode Microsoft

vous autorisez tous les non-authentifiés.Vous cherchez peut-être quelque chose comme ça

<deny users="?"/>

Quelle est l'extension de fichier de cette application de régulateur de vitesse ?S'il ne s'agit pas d'un type de fichier pour lequel ASP.NET est enregistré (par ex.jsp, java, etc), alors ASP.NET n'agira pas comme un mécanisme d'authentification (sur IIS 5 et 6).Par exemple, pour les fichiers HTML statiques, à moins que le mappage de caractères génériques soit implémenté, IIS effectue toute l'authentification et l'autorisation et sert le fichier sans impliquer l'extension isapi ASP.NET.IIS7 peut utiliser le nouveau mode pipeline intégré pour intercepter toutes les requêtes.Pour IIS6, vous voudrez regarder L'article de Scott Gu sur le sujet.

Aucune des suggestions ci-dessus n'a fonctionné pour moi.Il s'avère que dans l'ensemble racine web.config :

<forms loginUrl="/pages/login.aspx" enableCrossAppRedirects="true"...

et assurez-vous que l'application racine et l'application enfant sont dans system.web

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1"/>

qui désactive la valeur par défaut d'IsolateApps.

Ensuite, tout a fonctionné !

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top