2010-06-10 11 views
5

Sto costruendo un'applicazione Silverlight ospitata su Web App ASP.NET./IIS7/Sito Web abilitato per SSL.
Per motivi di sicurezza, ho messo la mia pagina Silverlight all'interno di una cartella Membri nel Web ASP.NET, e limitato l'accesso da parte degli utenti anonimi. (Vedi web.config sotto)Problema di reindirizzamento della pagina di accesso ASP.NET

quando gli utenti tentano di accedere alle pagine sotto cartella Membri, vengono reindirizzati a https://www.ssldemo.com/authenticationtest/login.aspx. (vedi web.config sotto) (Ho mappato www.ssldemo.com a 127.0.0.1). per sicurezza, sto passando a HTTPS in login.aspx e ritorno a HTTP dopo la convalida. di seguito è il codice per login.aspx.cs.

protected void Page_Load(object sender, EventArgs e) 
    { 
     LoginControl.LoggedIn += new EventHandler(LoginControl_LoggedIn); 
    } 

    void LoginControl_LoggedIn(object sender, EventArgs e) 
    { 
     //for going to ReturnURL & switching back to HTTP 
     string serverName = HttpUtility.UrlEncode(Request.ServerVariables["SERVER_NAME"]); 
     string returnURL = Request["ReturnURL"]; 
     Response.Redirect(ResolveClientUrl("http://" + serverName + returnURL)); 
    } 

Il problema è che quando schiero un'altra applicazione per http://www.ssldemo.com/authenticationtest/members/AnotherApplication/ e aperto http://www.ssldemo.com/authenticationtest/members/AnotherApplication/default.aspx, utenti vengono reindirizzati a https://www.ssldemo.com/authenticationtest/login.aspx?ReturnUrl=%2fauthenticationtest%2fmembers%2fanotherapplication%2fdefault.aspx. ma anche quando inserisco le credenziali corrette nella pagina di accesso, vengo reindirizzato nuovamente alla stessa pagina di login, non a ReturnUrl. quando ho guardato il violinista, ha detto che "l'oggetto 302 è stato spostato qui".

Grazie per aver letto! Qualsiasi input sarà molto apprezzato.

<configuration> 
<connectionStrings> 
    <add name="CompanyDatabase" connectionString="Data Source=192.168.0.2;Initial Catalog=SomeTable;User ID=Username;[email protected]" /> 
</connectionStrings> 

<system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    <authentication mode="Forms"> 
     <forms slidingExpiration="true" timeout="15" 
       loginUrl="https://www.ssldemo.com/authenticationtest/login.aspx" 
       defaultUrl="~/Members/Default.aspx" 
       > 
     </forms> 
    </authentication> 
    <!--Custom Membership Provider--> 
    <membership defaultProvider="MyMembershipProvider" userIsOnlineTimeWindow="15"> 
     <providers> 
      <clear /> 
      <add name="MyMembershipProvider" 
       type="AuthenticationTest.Web.MyMembershipProvider" 
       connectionStringName="CompanyDatabase" 
       applicationName="AuthenticationTest.Web"/> 
     </providers> 
    </membership> 
</system.web> 
<!--securing folders--> 
<location path="Members"> 
    <system.web> 
     <authorization> 
      <deny users="?"/> 
     </authorization> 
    </system.web> 
</location>  
</configuration> 

risposta

3

L'applicazione di sotto membri (sub app) eredita le impostazioni da quello sopra, in modo che raccoglie le impostazioni Auth, che è il motivo per cui si va a quella pagina di login.

Il motivo per cui non funziona mai riguarda il modo in cui il ticket è crittografato. I biglietti non possono essere riutilizzati tra le applicazioni a meno che non si esegua qualche configurazione aggiuntiva. Ciò impedisce a un utente di autenticarsi in un'app e di accedere a tutte le altre app sul server. Asp.Net lo fa creando una nuova chiave casuale per ogni app.

Per prima cosa è necessario aggiungere enableCrossAppRedirects = true all'elemento forms. Devi quindi impostare MachineKey come uguale in entrambe le app in modo che entrambe possano decodificare i ticket di autenticazione.

Questa pagina può aiutare http://msdn.microsoft.com/en-us/library/eb0zx8fc.aspx

Problemi correlati