Asp.net mvc ASP.NETMVC-使用外部URL进行表单身份验证

Asp.net mvc ASP.NETMVC-使用外部URL进行表单身份验证,asp.net-mvc,forms-authentication,Asp.net Mvc,Forms Authentication,我们的组织有一个表单身份验证的中央解决方案。我正在尝试实现一个ASP.NETMVC应用程序,它使用这个外部URL-它一直工作到RC!被释放了 下面是发生的事情 在ActionAttribute扩展中 我检查s会话变量 如果找不到 检查是否有请求数据 如果找到,则设置会话变量 如果未找到-重定向到外部URL 如果找到 继续 问题是,在我更新到RC1之前,这是有效的。从那时起,如此多的请求被发送到外部URL,以至于它检测到DoS攻击并将我拒之门外 我删除了重定向代码,并将其替换为Forms Auth

我们的组织有一个表单身份验证的中央解决方案。我正在尝试实现一个ASP.NETMVC应用程序,它使用这个外部URL-它一直工作到RC!被释放了

下面是发生的事情

在ActionAttribute扩展中

我检查s会话变量 如果找不到 检查是否有请求数据 如果找到,则设置会话变量 如果未找到-重定向到外部URL 如果找到 继续

问题是,在我更新到RC1之前,这是有效的。从那时起,如此多的请求被发送到外部URL,以至于它检测到DoS攻击并将我拒之门外

我删除了重定向代码,并将其替换为Forms Auth的web.config更改-同样的事情发生了…

为什么不使用而不是尝试滚动您自己的身份验证提供程序?

代码:

public class MyAuthenticate : ActionFilterAttribute
    {        
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (filterContext.HttpContext.Session["user"] == null)
            {
                using (Authenticator dp = new Authenticator())
                {
                    MyUser mu;
                    string data = string.Empty;
                    try
                    {
                        data = filterContext.HttpContext.Request["Data"];
                    }
                    catch { };

                    if (!string.IsNullOrEmpty(data))
                    {
                        mu = dp.Redeem(data);
                        if (mu.authenticated)
                        {                            
                            filterContext.HttpContext.Session.Clear();
                            AuthenticatedUser user = new AuthenticatedUser(mu);
                            filterContext.HttpContext.Session.Add("user", user);
                            FormsAuthentication.SetAuthCookie(user.UserId, false);
                        }
                        else
                        {
                            filterContext.HttpContext.Response.Redirect("MY EXTERNAL URL GOES HERE!!");

                        }
                    }
                    else
                    {
                        filterContext.HttpContext.Response.Redirect("MY EXTERNAL URL GOES HERE!!");
                    }
                }
            }
            base.OnActionExecuting(filterContext);
        } 
    }
}

我通过创建一个请求IP的静态字典,并删除来自同一IP的重复请求,解决了这个问题。这不是一个很好的解决方案,所以如果有人想出更好的解决方案,请告诉我。

ActionAttribute还是AuthorizeAttribute?一点代码也会有帮助。因为这是我无法控制的——当我经营自己的公司时——我会有这个选择,不幸的是,作为一个好的企业公民,我需要使用已经存在的东西,以及组织中所有其他应用程序所使用的东西。。。你有什么真正的答案吗?我不认为你真的考虑过我所说的,如果你不认为这是“真正的答案”。日内瓦做你想做的事。下载日内瓦白皮书。读一下。需要服务器端更改=我无法控制。在这种情况下,这不是一个真正的解决方案。不想伤害你的自尊或任何东西,但我需要一个客户端解决方案,而不完全改变架构。。。谢谢无论我是使用这段代码,还是只是在web配置中使用外部URL设置Forms auth,都无关紧要——观察到了相同的行为——不断点击外部URL(超过30次/秒)。事实证明,问题在于验证,这取决于令牌的内容,扔掉它——毫无例外地被扔掉……:(