2010-03-31 17 views
5

Tengo un problema con Uploadify y espero que alguien pueda ayudar. He puesto Uploadify en mi aplicación y todo funciona bien en dev (usando el servidor web VS). Todo funcionó bien y se verificó hasta que implementé la aplicación en mi entorno de prueba que utiliza la Autenticación de Windows integrada.Uploadify (carga de archivos flash) y Autenticación de Windows integrada

Cuando realmente voy a cargar el archivo, el navegador muestra un mensaje de inicio de sesión. En este punto, incluso si escribe el nombre de usuario y la contraseña correctos, la solicitud no parece completarse e, incluso si le dice al navegador que recuerde la contraseña, aún aparece el aviso de inicio de sesión.

Cuando esto comenzó a ocurrir, decidí girar Fiddler y ver qué estaba pasando. Pero adivina qué, cuando Fiddler está funcionando, el problema no ocurre.

Lamentablemente, no puedo hacer que Fiddler funcione como un requisito para ejecutar la aplicación. Por lo tanto, ¿alguien tiene alguna idea? Sé que hay algunos problemas con Uploadify/flash cuando utilizo la autenticación de formularios, pero no creo que se hayan transmitido a la Autenticación de Windows integrada.

Respuesta

2

Vi esta página y casi me rindo, pero luego me encontré con este article de Craig en PluralSight. Lo que me dio la idea de devolver un 401 de ASP.Net en lugar de IIS, razón por la cual la autenticación anónima está habilitada en IIS.

Estos son los pasos para solucionar el problema.

Paso 1: habilite la autenticación anónima y la autenticación de Windows en IIS.

Paso 2: Añadir este código a su Global.asax.cs
crédito/Gracias a:Uploadify (Session and authentication) with ASP.NET MVC
Nota: En mi versión sólo las peticiones POST utilizan la lógica especial ya que sólo quiero a este código trabajo para uploadify. En otras palabras, elimino el código para las solicitudes GET. Eche un vistazo al enlace de arriba si quiere apoyar GET.

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    /* we guess at this point session is not already retrieved by application so we recreate cookie with the session id... */ 
    try 
    { 
     string session_param_name = "ASPSESSID"; 
     string session_cookie_name = "ASP.NET_SessionId"; 

     if (HttpContext.Current.Request.Form[session_param_name] != null) 
     { 
      UpdateCookie(session_cookie_name, HttpContext.Current.Request.Form[session_param_name]); 
     } 

    } 
    catch 
    { 
    } 

    try 
    { 
     string auth_param_name = "AUTHID"; 
     string auth_cookie_name = FormsAuthentication.FormsCookieName; 

     if (HttpContext.Current.Request.Form[auth_param_name] != null) 
     { 
      UpdateCookie(auth_cookie_name, HttpContext.Current.Request.Form[auth_param_name]); 
      return; // this is an uploadify request....get out of here. 
     } 

    } 
    catch 
    { 
    } 

    // handle the windows authentication while keeping anonymous turned on in IIS. 
    // see: https://stackoverflow.com/questions/2549914/uploadify-flash-file-upload-integrated-windows-authentication 

    if (Request.ServerVariables["LOGON_USER"].Length == 0) // They haven't provided credentials yet 
    { 
     Response.StatusCode = 401; 
     Response.StatusDescription = "Unauthorized"; 
     Response.End(); 
     return; 
    } 

    FormsAuthentication.SetAuthCookie(Request.ServerVariables["LOGON_USER"], true); 

} 

private void UpdateCookie(string cookie_name, string cookie_value) 
{ 
    HttpCookie cookie = HttpContext.Current.Request.Cookies.Get(cookie_name); 
    if (null == cookie) 
    { 
     cookie = new HttpCookie(cookie_name); 
    } 
    cookie.Value = cookie_value; 
    HttpContext.Current.Request.Cookies.Set(cookie); 
} 

Paso 3: Actualice el javascript que invoca uploadify para incluir la clave de autenticación del formulario y la clave de sesión.

<script> 
    var auth = "<% = Request.Cookies[FormsAuthentication.FormsCookieName]==null ? string.Empty : Request.Cookies[FormsAuthentication.FormsCookieName].Value %>"; 
    var ASPSESSID = "<%= Session.SessionID %>"; 

    $("#uploadifyLogo").uploadify({ 
     ... 
     scriptData: { ASPSESSID: ASPSESSID, AUTHID: auth } 
    }); 

Paso 4: Actualizar el web.config

<system.web> 
    ... 
    <authentication mode="Forms"> 
     <forms defaultUrl="/" /> 
    </authentication> 
    ... 
+0

estoy teniendo el mismo problema como el OP y yo intentado la solución, pero no puedo conseguir que funcione. Por algún motivo, Request.ServerVariables ["LOGON_USER"] siempre está vacío. ¿Alguna sugerencia? – Simon

+0

¿Están habilitadas la autenticación anónima y la autenticación de Windows en IIS? –

+0

Sé que es tarde para comentar/hacer preguntas, pero esto significa que la solución para usar uploadify y la Autenticación de Windows requiere que NO se use la Autenticación de Windows. – bzarah

Cuestiones relacionadas