2010-03-31 2 views
5

Sto riscontrando un problema con Uploadify e spero che qualcuno possa aiutarti. Ho caricato Uploadify nella mia app e tutto funziona bene in dev (usando il server web VS). Tutto ha funzionato e controllato finché non ho distribuito l'app nel mio ambiente di test che utilizza l'autenticazione integrata di Windows.Uploadify (caricamento file flash) e autenticazione integrata di Windows

Quando in realtà vado a caricare il file, il browser visualizza un prompt di accesso. A questo punto, anche se si digita il nome utente e la password corretti, la richiesta sembra non essere completata e anche se si dice al browser di ricordare la password, viene comunque visualizzato il prompt di accesso.

Quando questo ha iniziato a verificarsi, ho deciso di far ruotare Fiddler e vedere cosa stava succedendo. Ma indovina cosa, quando Fiddler è in esecuzione il problema non si verifica.

Purtroppo non riesco a rendere in esecuzione Fiddler un reuqierment per l'esecuzione dell'applicazione. Quindi qualcuno ha qualche idea. So che ci sono alcuni problemi con Uploadify/flash quando si utilizza l'autenticazione dei moduli, ma non ritenevo che fossero portati a Integrare l'autenticazione di Windows.

risposta

2

Ho visto questa pagina e mi sono quasi arreso, ma poi mi sono imbattuto in questo article da Craig a PluralSight. Il che mi ha dato l'idea di restituire un 401 da ASP.Net invece di IIS, motivo per cui l'autenticazione anonima è abilitata in IIS.

Ecco i passaggi per risolvere il problema.

Passaggio 1: abilitare l'autenticazione anonima e l'autenticazione di Windows in IIS.

Fase 2: Aggiungere il codice al tuo Global.asax.cs
credito/Grazie a:Uploadify (Session and authentication) with ASP.NET MVC
Nota: Nella mia versione solo richieste POST utilizzano la logica speciale perché voglio solo questo codice lavoro per uploadify. In altre parole, elimino il codice per le richieste GET. Dai un'occhiata al link sopra se vuoi supportare 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); 
} 

Passaggio 3: aggiornare il javascript invocando uploadify per includere la chiave di autenticazione del modulo e la chiave di sessione.

<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 } 
    }); 

Fase 4: Aggiorna il tuo web.config

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

Sto avendo lo stesso identico problema come il PO e ho provato la soluzione, ma non riesco a farlo funzionare. Per qualche ragione Request.ServerVariables ["LOGON_USER"] è sempre vuoto. Eventuali suggerimenti? – Simon

+0

Sia l'autenticazione anonima che l'autenticazione di Windows sono abilitate in IIS? –

+0

So che è tardi per commentare/porre domande, ma questo significa che la soluzione per utilizzare uploadify e l'autenticazione di Windows NON richiede l'autenticazione di Windows? – bzarah