Domanda

Sto lavorando a uno strumento interno basato sul Web per la mia azienda.Parte di questo strumento è un'altra applicazione (The Cruise Control Dashboard) che viene eseguita nella propria directory virtuale sotto la mia applicazione root.

Volevo limitare l'accesso a questa applicazione interna configurando l'autenticazione basata su moduli e disponendo di un modulo di accesso nell'applicazione root.

Ho inserito quanto segue nelle applicazioni root web.config:

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

Tuttavia, l'autenticazione basata su moduli non sembra funzionare e non reindirizza alla pagina di accesso quando accedo direttamente all'applicazione.

Ho la sensazione che i tag <allow> e <deny> siano impostati in modo errato.Qualcuno può chiarire?

È stato utile?

Soluzione

Penso che potresti anche dover inserire path="/" nei tag <forms.Scusa, è da un po' che non lo faccio

Altri suggerimenti

Potrebbe anche essere necessario inserire path="/" nel file

Questo è tutto!

Quindi, Riepilogo, per fare questo;

Nella root web.config aggiungi:

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

Questo deve essere fatto perché per impostazione predefinita è "AutoGenerate,IsolateApps".

In secondo luogo, devi nominare il cookie Auth del modulo allo stesso modo in entrambi, ho fatto tutto nella mia root, usando il tag location:

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

Finalmente:

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

Grazie a tutti per il vostro aiuto.Questo è stato un problema.

FormsAuthentication crittografa i token forniti all'utente e, per impostazione predefinita, crittografa chiavi diverse per ciascuna applicazione.Per far sì che l'autenticazione moduli funzioni tra le applicazioni, ci sono un paio di cose che devi fare:

Innanzitutto, imposta lo stesso "nome" di autenticazione moduli su tutte le applicazioni.Questo viene fatto con:

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

Imposta il "nome" in modo che sia lo stesso in entrambe le applicazioni web.configs.

In secondo luogo, è necessario indicare a entrambe le applicazioni di utilizzare la stessa chiave durante la crittografia.Questo è un po' confuso.Durante la configurazione, tutto quello che dovevo fare era aggiungere quanto segue a entrambi i web.config:

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

Secondo i documenti, questo è il valore predefinito, ma non ha funzionato per me a meno che non lo specificassi.

Non funziona, consente comunque a tutti gli utenti (autenticati o meno) di accedere.

Penserei che potresti anche omettere il tag di autorizzazione, poiché è ridondante.Appena:

<deny users="?"/>

Dove si trova quel codice, Jonathan?Nella mia esperienza ho un controllo di accesso e nell'evento OnAuthenticate imposterei Authenticated su false...

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

Ma questo sta usando il Microsoft Way

stai consentendo a tutti quelli non autenticati.Potresti cercare qualcosa di simile

<deny users="?"/>

Qual è l'estensione del file per questa applicazione di controllo automatico della velocità?Se non è un tipo di file che ASP.NET è registrato per gestire (ad es.jsp, Java, ecc.), ASP.NET non fungerà da meccanismo di autenticazione (su IIS 5 e 6).Ad esempio, per i file HTML statici, a meno che non sia implementata la mappatura dei caratteri jolly, IIS esegue tutte le operazioni di autenticazione e autorizzazione e fornisce il file senza coinvolgere l'estensione isapi ASP.NET.IIS7 può utilizzare la nuova modalità pipeline integrata per intercettare tutte le richieste.Per IIS6, ti consigliamo di guardare L'articolo di Scott Gu sull'argomento.

Nessuno dei suggerimenti di cui sopra ha funzionato per me.Risulta nel set web.config root:

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

e assicurati che sia l'app root che quella secondaria siano presenti in system.web

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

che disattiva l'impostazione predefinita di IsolateApps.

Poi tutto ha funzionato!

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