Domanda

Stiamo provando a implementare formAutenticazione sul nostro sito, ma in uno scenario in cui non siamo ancora riusciti a trovare una soluzione - oltre a creare il nostro HttpModule e fare noi stessi la logica personalizzata - quindi ho pensato di ' buttare la domanda là fuori per vedere se questa fosse davvero l'unica soluzione.

Vorremmo utilizzare i moduli di autenticazione su provider di appartenenze personalizzati, ma vorremmo utilizzare un provider diverso per cartelle diverse. Il nostro sito suddivide queste sezioni con sottocartelle (ad esempio: ~ / Admin, ~ / GoldCustomer, ~ / SilverCustomer, ~ / BronzeCustomer), quindi vorremmo utilizzare diversi provider di appartenenza per ogni sezione / sottocartella. Usando il framework per supportare questo, implementeremmo il nostro web.config come:

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

In questo modo, tuttavia, si verifica l'errore di runtime:

È un errore utilizzare una sezione registrata come allowDefinition = 'MachineToApplication' oltre il livello dell'applicazione. Questo errore può essere causato da una directory virtuale non configurata come applicazione in 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>

Sembra che l'unico modo per realizzare ciò che stiamo provando sia con un HttpModule personalizzato - o cambiare il nostro approccio (come spezzare le cartelle in diverse app Web in IIS). È corretto o mi manca qualcosa? O ci sono altre alternative di cui non sono a conoscenza?

Grazie per l'aiuto!

È stato utile?

Soluzione

Prima di tutto, penso che la sicurezza basata sui ruoli abbia perfettamente senso per la tua applicazione se hai il controllo sui database. Ma se non puoi cambiarlo, è un no-go.

La soluzione alternativa può essere un modulo di accesso gateway che reindirizza l'utente a un modulo di accesso specifico per cartella basato sulla ReturnUrl variabile di query e tale modulo utilizzerà il provider che desidera convalidare l'utente. Quindi utilizza FormsAuthentication.RedirectFromLoginPage per impostare un cookie di autenticazione e reindirizzare alla pagina precedente. Puoi impostare i ruoli e utilizzare la sicurezza basata sui ruoli per controllare l'accesso a ciascuna cartella con il tag <authorization> in web.config.

Altri suggerimenti

Non sono sicuro di cosa stai cercando di fare, ma che ne dici di ruoli per ciascuno di questi tipi di clienti? Limita l'accesso per ruolo per ogni sottocartella ma avresti comunque 1 provider di appartenenza e 1 provider di ruoli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top