2010-03-31 7 views
5

Tôi đang gặp sự cố với Tải lên và tôi hy vọng ai đó có thể trợ giúp. Tôi đã đặt Uploadify vào ứng dụng của tôi và tất cả các công trình tốt trong dev (sử dụng máy chủ web VS). Tất cả làm việc tốt và kiểm tra cho đến khi tôi triển khai các ứng dụng vào môi trường thử nghiệm của tôi trong đó sử dụng xác thực Windows tích hợp.Tải lên (tải lên tệp flash) & Xác thực Windows Tích hợp

Khi tôi thực sự truy cập tệp tải lên, trình duyệt sẽ hiển thị lời nhắc đăng nhập. Tại thời điểm này, ngay cả khi bạn nhập đúng tên người dùng và mật khẩu, yêu cầu dường như không hoàn thành và ngay cả khi bạn yêu cầu trình duyệt ghi nhớ mật khẩu, nó vẫn hiển thị lời nhắc đăng nhập.

Khi điều này bắt đầu xảy ra, tôi quyết định quay lên Fiddler và xem điều gì đang diễn ra. Nhưng hãy đoán xem, khi nào Fiddler đang chạy vấn đề không xảy ra.

Thật không may là tôi không thể chạy Fiddler một reuqierment để chạy ứng dụng. Do đó, bất cứ ai có bất kỳ ý tưởng. Tôi biết có một số vấn đề với Uploadify/flash khi sử dụng xác thực biểu mẫu nhưng tôi không nghĩ rằng họ đã chuyển sang Xác thực Windows tích hợp.

Trả lời

2

Tôi thấy trang này và tôi gần như đã từ bỏ nhưng sau đó tôi chạy qua số này article từ Craig tại PluralSight. Điều đó đã cho tôi ý tưởng trả về 401 từ ASP.Net thay vì IIS, đó là lý do tại sao xác thực ẩn danh được kích hoạt trong IIS.

Dưới đây là các bước để khắc phục sự cố.

Bước 1: Bật xác thực ẩn danh và xác thực Windows trong IIS.

Bước 2: Thêm mã này để Global.asax.cs của bạn
tín dụng/Nhờ:Uploadify (Session and authentication) with ASP.NET MVC
Lưu ý: Trong phiên bản của tôi chỉ yêu cầu POST sử dụng logic đặc biệt kể từ khi tôi chỉ muốn mã này vào làm việc để tải lên. Nói cách khác, tôi xóa mã cho các yêu cầu GET. Hãy xem liên kết ở trên nếu bạn muốn hỗ trợ 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); 
} 

Bước 3: Cập nhật javascript gọi uploadify để bao gồm khóa xác thực và khóa phiên của biểu mẫu.

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

Bước 4: Cập nhật web.config của bạn

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

Tôi đang gặp vấn đề chính xác cùng như OP và tôi đã cố gắng giải pháp của bạn nhưng tôi không thể có được nó để làm việc. Đối với một số lý do Request.ServerVariables ["LOGON_USER"] luôn trống. Bất kỳ đề xuất? – Simon

+0

Cả xác thực ẩn danh và xác thực cửa sổ có được bật trong IIS không? –

+0

Tôi biết đã muộn để nhận xét/đặt câu hỏi, nhưng điều này có nghĩa là giải pháp sử dụng uploadify và Xác thực Windows yêu cầu KHÔNG sử dụng Xác thực Windows? – bzarah