Question

Nous essayons d'implémenter l'authentification de formulaires sur notre site, mais dans un scénario pour lequel nous n'avons pas encore trouvé de solution - autre que la création de notre propre module HttpModule et la création de la logique personnalisée - nous avons donc pensé d jetez la question pour voir s’il s’agissait bien de la seule solution.

Nous aimerions utiliser formsAuthentication en plus des fournisseurs d'adhésion personnalisés, mais nous souhaiterions utiliser un fournisseur différent pour différents dossiers. Notre site partitionne ces sections avec des sous-dossiers (par exemple: ~ / Admin, ~ / GoldCustomer, ~ / SilverCustomer, ~ / BronzeCustomer). Nous souhaitons donc utiliser différents fournisseurs d'adhésion pour chaque section / sous-dossier. En utilisant le framework pour supporter cela, nous avons implémenté notre web.config comme:

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<location path="Admin">
<system.web>
  <authentication mode="Forms">
    <forms name="AdminAuth" loginUrl="~/AdminLogin.aspx" />
  </authentication>
  <membership defaultProvider="AdminProvider" >
    <providers >
      <add connectionStringName="ConnString" name="AdminProvider" type="Assembly.AdminMembershipProvider" ... />
    </providers>
  </membership>
</system.web>
</location>
<location path="GoldCustomer">
  <system.web>
  <authentication mode="Forms">
    <forms name="GoldCustomerAuth" loginUrl="~/GoldCustomerLogin.aspx" />
  </authentication>
  <membership defaultProvider="GoldCustomerProvider" >
    <providers >
      <add connectionStringName="ConnString" name="GoldCustomerProvider" type="Assembly.GoldCustomerMembershipProvider" ...="" />
    </providers>
  </membership>
</system.web>
</location>
<system.web>
  <compilation debug="true" />
  <authentication mode="Forms" />
</system.web>
</configuration>

Ceci entraîne cependant l'erreur d'exécution suivante:

C’est une erreur d’utiliser une section enregistrée avec allowDefinition = 'MachineToApplication' au-delà du niveau de l’application. Cette erreur peut être causée par le fait qu'un répertoire virtuel n'est pas configuré en tant qu'application dans IIS.

Line 11:   <location path="Admin">
Line 12:     <system.web>
Line 13:       <authentication mode="Forms">
Line 14:         <forms name="FormsAdmin" loginUrl="~/login.aspx" />
Line 15:       </authentication>

Il semble que la seule façon d'accomplir ce que nous essayons est d'utiliser un module HttpModule personnalisé ou de modifier notre approche (par exemple, diviser les dossiers en différentes applications Web dans IIS). Est-ce correct ou est-ce que je manque quelque chose? Ou y a-t-il d'autres alternatives dont je ne suis pas au courant?

Merci pour votre aide!

Était-ce utile?

La solution

Tout d'abord, je pense que la sécurité basée sur les rôles est parfaitement logique pour votre application si vous avez le contrôle des bases de données. Mais si vous ne pouvez pas le changer, c’est impossible.

La solution alternative peut être un formulaire de connexion de passerelle qui redirige l'utilisateur vers un formulaire de connexion spécifique à un dossier en fonction de la variable ReturnUrl querystring. Ce formulaire utilisera le fournisseur qu'il souhaite valider. Ensuite, il utilise FormsAuthentication.RedirectFromLoginPage pour définir un cookie d'authentification et rediriger vers la page précédente. Vous pouvez définir les rôles et utiliser la sécurité basée sur les rôles pour contrôler l'accès à chaque dossier avec la balise <authorization> dans web.config.

.

Autres conseils

Je ne suis pas sûr de ce que vous essayez de faire, mais qu'en est-il des rôles pour chacun de ces types de clients? Limitez l’accès à un rôle pour chaque sous-dossier, mais vous disposeriez toujours d’un fournisseur d’appartenance et d’un fournisseur de rôles.

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