Autenticazione moduli Ignorare il documento predefinito

Ho passato un giorno e mezzo a cercare di risolvere questo problema. Bascially ha un sito web ASP.net con autenticazione basata su form su IIS7 utilizzando Framework 4.0.

Le cose di authorization sembrano funzionare perfettamente per ogni scenario con l’eccezione di colpirlo senza alcun documento specificato (dovrebbe risolversi in Doc predefinito).

Ad esempio (Si prega di non essere duro sul sito è ancora in fase di sviluppo;)), http://www.rewardroster.com/Default.aspx funziona perfettamente, questa pagina dovrebbe consentire l’accesso anon come specificato nel web.config.

ma se clicco direttamente su www.rewardroster.com, reindirizza alla pagina di accesso con l’URL di ritorno impostato su “/” o Login.aspx? ReturnUrl =% 2f

Alcune cose che ho provato:

1) Impostare l’autenticazione su Nessuno e quindi il documento predefinito ha funzionato, quindi non è questo il problema.

2) Aggiunto attributo DefaultDocument a Web.config

3) Eliminate tutte le voci nell’elenco dei documenti predefiniti in IIS, ad eccezione di Default.aspx

4) Aggiunta voce MachineKey in Config

5) Passa dalla pipeline integrata a quella classica in IIS

Ecco cosa c’è nella mia configurazione:

      

Grazie mille per il tuo tempo e spero che qualcuno sappia cosa sta succedendo qui.

Questa è stata la mia soluzione:

In Global.asax , metodo: Application_BeginRequest , inserire quanto segue:

 if (Request.AppRelativeCurrentExecutionFilePath == "~/") HttpContext.Current.RewritePath("HomePage.aspx"); 

Bello e semplice, e hai la possibilità di build una logica intorno a quale pagina home vuoi utilizzare se il tuo sito web utilizza più home page in base alle variabili di configurazione.

Dmitry.Alk

Stavo vedendo questo stesso problema quando si tenta di colpire il percorso di root e ho provato tutto precedentemente menzionato. Sembra che Asp.net 4.0 aggiunga due moduli ExtensionlessUrl a applicationhost.config per IIS 7. Puoi rimuovere questi moduli aggiungendo quanto segue al tuo web.config

       

Informazioni aggiuntive

Microsoft KB

Come vengono gestiti gli URL senza estensione da asp net v4

Ho avuto un problema simile. Nessuno stile quando non ero loggato, http://www.site.nl \ reindirizzato alla pagina di accesso (con un URL di reindirizzamento a una home-page) e inserendo http://www.site.nl \ Home (stessa homepage dell’URL di reindirizzamento menzionato prima) non aveva bisogno di un login.

La soluzione era:

  • Apri IIS
  • Apri IIS: autenticazione
  • Apri e modifica l’accesso anonimo
  • Controlla utente (ho cambiato l’utente con l’utente app.pool)
  • Fornire i diritti utente nella root del sito (sul file system)

Ha funzionato per me.

In bocca al lupo

Quello che ho finito per risolvere questo problema è scrivere alcune righe di codice nella mia pagina di accesso per verificare la presenza di Request.QueryString [“ReturnUrl”] di “/”. Se lo ha trovato, è stato reindirizzato su default.aspx.

Non sono riuscito a trovare QUALSIASI modo per rendere l’autenticazione dei moduli non intercettare le chiamate senza una pagina specificata (es. http://Www.mysite.com). 🙁 Ho anche provato il routing URL 4 di .NET e questo non ha impedito l’autenticazione basata su form anche per il dirottamento della richiesta.

Di seguito è riportato il codice che ho usato in login.aspx:

 protected void Page_Load(object sender, EventArgs e) { if (!(IsPostBack || IsAsync)) { string returnUrl = Request.QueryString["ReturnUrl"]; if (returnUrl != null) if (returnUrl == "/") Response.Redirect("default.aspx"); } } 

La soluzione di Johan ha funzionato per me, ma solo se la richiesta era per la radice del sito.

Il mio sito è organizzato in questo modo:

  • www. [mysite] .com / login.aspx
  • www. [mysite] .com / default.aspx
  • www. [mysite] .com / [somestuff] /default.aspx
  • www. [mysite] .com / [morestuff] /default.aspx

Dopo aver seguito il buon consiglio di Johan, le richieste su www. [Mysite] .com sono state indirizzate alla pagina di accesso dei moduli e, dopo il login, alla pagina predefinita. Tuttavia, se qualcuno ha richiesto “/ [somestuff /”, non funzionerebbe ancora.

L’ho fatto funzionare abilitando l’autenticazione anonima nelle directory [somestuff] e [morestuff], e quindi disabilitandola sui singoli file all’interno di queste directory. Questa non è una configurazione di sicurezza che voglio supportare, dato che le persone potrebbero ottenere dove stanno andando da default.aspx o semplicemente richiedendo [somestuff] /default.aspx per cominciare. Ma ora so perché sta fallendo. Sembra che tu abbia bisogno di un accesso anonimo sulle directory su cui desideri utilizzare i documenti predefiniti.

Ho avuto un problema simile oggi. Stavo provando a utilizzare la pipeline integrata per proteggere risorse non-asp.net (file statici, php, ecc.).

Avevo una regola nel mio web.config di root che aveva, quindi stavo permettendo l’accesso a risorse specifiche caso per caso.

Questo ha funzionato, tranne per il fatto che le richieste a “/” non potevano mai essere autenticate (reindirizzamento infinito alla pagina di accesso), mentre le richieste a “/Default.aspx” andavano bene.

Il mio problema era dovuto al fatto che il modulo UrlAuthentication di Asp.Net era abilitato per tutti i tipi di risorse, e apparentemente questo non funziona per il mio scenario. Invece ho dovuto cambiare quel modulo per funzionare solo per le risorse gestite e installare l’autenticazione url non gestita da IIS7. Ho quindi dovuto configurarlo (poiché utilizza diverse impostazioni di autenticazione) e assicurarmi che il RoleManager fosse abilitato per le risorse non gestite (poiché stavo autenticandomi sui ruoli). Questo URL potrebbe essere utile: http://learn.iis.net/page.aspx/142/understanding-iis-70-url-authorization/

Mi imbatto nello stesso problema e mi sono risolto in questo modo:

in Global.asax accanto alla soluzione Dmitry.Alk ho aggiunto:

  if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~/default.aspx") HttpContext.Current.RewritePath("Default.aspx"); if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~/") HttpContext.Current.RewritePath("Default.aspx"); if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~") HttpContext.Current.RewritePath("Default.aspx");