Asp.net mvc ASP.NETMVC-使用外部URL进行表单身份验证
我们的组织有一个表单身份验证的中央解决方案。我正在尝试实现一个ASP.NETMVC应用程序,它使用这个外部URL-它一直工作到RC!被释放了 下面是发生的事情 在ActionAttribute扩展中 我检查s会话变量 如果找不到 检查是否有请求数据 如果找到,则设置会话变量 如果未找到-重定向到外部URL 如果找到 继续 问题是,在我更新到RC1之前,这是有效的。从那时起,如此多的请求被发送到外部URL,以至于它检测到DoS攻击并将我拒之门外 我删除了重定向代码,并将其替换为Forms Auth的web.config更改-同样的事情发生了…为什么不使用而不是尝试滚动您自己的身份验证提供程序?代码: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
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次/秒)。事实证明,问题在于验证,这取决于令牌的内容,扔掉它——毫无例外地被扔掉……:(