2010-06-10 11 views
5

Estoy creando una aplicación Silverlight alojada en la aplicación web ASP.NET./Sitio web compatible con IIS7/SSL.
Para mayor seguridad, puse mi página de Silverlight dentro de una carpeta Miembros en la aplicación Web ASP.NET, y limita el acceso de usuarios anónimos. (Ver más adelante web.config)Problema de redirección de página de inicio de sesión de ASP.NET

cuando los usuarios intentan acceder a páginas bajo carpeta Miembros, se los redirige al https://www.ssldemo.com/authenticationtest/login.aspx. (ver web.config a continuación) (he mapeado www.ssldemo.com a 127.0.0.1). para la seguridad, estoy cambiando a HTTPS en login.aspx, y de regreso a HTTP después de la validación. a continuación es el código para 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)); 
    } 

El problema es que cuando despliego otra aplicación a http://www.ssldemo.com/authenticationtest/members/AnotherApplication/ y abierto http://www.ssldemo.com/authenticationtest/members/AnotherApplication/default.aspx, usuarios redirigidos a https://www.ssldemo.com/authenticationtest/login.aspx?ReturnUrl=%2fauthenticationtest%2fmembers%2fanotherapplication%2fdefault.aspx. pero incluso cuando ingreso las credenciales correctas en la página de inicio de sesión, me redireccionan a la misma página de inicio de sesión, no a ReturnUrl. cuando miré en el violín, decía '302 objeto movido hasta aquí'.

¡Gracias por leer! Cualquier comentario será muy apreciado.

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

Respuesta

3

La aplicación por debajo de los miembros (la aplicación sub) hereda la configuración de la anterior, por lo que recoge la configuración de autenticación, por lo que va a esa página de inicio de sesión.

La razón por la que nunca funciona tiene que ver con la forma en que se cifra el ticket. Los boletos no se pueden reutilizar entre aplicaciones a menos que usted haga alguna configuración adicional. Esto impide que un usuario se autentique en una aplicación y luego acceda a todas las demás aplicaciones del servidor. Asp.Net hace esto creando una nueva clave aleatoria para cada aplicación.

Primero debe agregar enableCrossAppRedirects = true al elemento forms. Luego debe configurar MachineKey para que sea el mismo en ambas aplicaciones, de modo que ambas aplicaciones puedan decodificar los tickets de autenticación.

Esta página puede ayudar http://msdn.microsoft.com/en-us/library/eb0zx8fc.aspx

Cuestiones relacionadas