我们的组织有一个表单身份验证的核心解决方案。我正在尝试实现一个使用此外部URL的ASP.Net MVC应用程序 - 它一直工作到RC!被释放了......
这是发生了什么
在ActionAttribute扩展
中我检查s session var 如果没有找到 检查请求数据夹头 如果找到,设置会话var 如果找不到 - 重定向到外部URL 如果发现 继续。
麻烦的是,直到我更新到RC1,这才有效。从那时起,这么多请求被发送到外部URL,它检测到DoS攻击并关闭我!
我删除了重定向代码,并将其替换为Forms Auth的web.config更改 - 同样的事情发生了......
答案 0 :(得分:0)
为什么不使用Microsoft Geneva而不是尝试推送自己的身份验证提供程序?
答案 1 :(得分:0)
CODE:
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);
}
}
}
答案 2 :(得分:0)
我通过创建请求IP的静态字典并从同一IP中删除重复请求来解决此问题。不是一个非常好的解决方案 - 所以如果有人想出更好的解决方案 - 请告诉我。