flash - Uploadify(闪存文件上传)和集成 Windows 身份验证

标签 flash iis browser file-upload uploadify

我遇到了 Uploadify 的问题,希望有人能提供帮助。我已将 Uploadify 放入我的应用程序中,并且在开发中一切正常(使用 VS Web 服务器)。在我将应用程序部署到使用集成 Windows 身份验证的测试环境之前,一切正常并进行了检查。

当我实际上传文件时,浏览器会弹出登录提示。此时,即使您输入了正确的用户名和密码,请求似乎也没有完成,即使您告诉浏览器记住密码,它仍然会弹出登录提示。

当这种情况开始发生时,我决定启动 Fiddler,看看发生了什么。但是你猜怎么着,当 Fiddler 运行时,这个问题不会发生。

不幸的是,我不能让运行 Fiddler 成为运行应用程序的必要条件。因此有没有人有任何想法。我知道在使用表单例份验证时,Uploadify/flash 存在一些问题,但我认为它们没有应用于集成 Windows 身份验证。

最佳答案

我看到这个页面,我几乎放弃了,但后来我遇到了这个 article来自 PluralSight 的 Craig。这给了我从 ASP.Net 而不是 IIS 返回 401 的想法,这就是为什么在 IIS 中启用匿名身份验证。

以下是解决此问题的步骤。

步骤 1:在 IIS 中启用匿名身份验证和 Windows 身份验证。

第 2 步:将此代码添加到您的 Global.asax.cs
信用/感谢: Uploadify (Session and authentication) with ASP.NET MVC
注:在我的版本中,只有 POST 请求使用特殊逻辑,因为我只希望此代码适用于上传。换句话说,我删除了 GET 请求的代码。如果您想支持 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);
} 

第 3 步:更新调用 uploadify 的 javascript 以包含表单的身份验证 key 和 session key 。
<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 } 
    }); 

第 4 步:更新您的 web.config
  <system.web>
    ...
    <authentication mode="Forms">
      <forms defaultUrl="/" />
    </authentication>
    ...

关于flash - Uploadify(闪存文件上传)和集成 Windows 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2549914/

相关文章:

javascript - 如何使用浏览器 fetch api 发出多部分/相关请求?

browser - 浏览器在处理大量请求时会超时吗?

apache-flex - 是否可以在 flex 项目的 ActionScript 中检索 swf 元数据?

javascript - IIS 8 并重定向特定页面

c# - 从 IIS 7/8 中的静态内容中删除服务器 header

asp.net - 在 Azure WebRoles 中启用 HTTP 严格传输安全 (HSTS)

javascript - 如何读取浏览器的媒体功能?

javascript - 从 Flash 调用时,facebook javascript sdk 登录对话框被阻止

ios - 是否有人制作了 Adob​​e 原生扩展以与 NextPeer 的社交插件集成

actionscript-3 - 加载和使用 SWF 文件