ASP.Net MVC - 使用外部URL形成身份验证

时间:2009-02-06 19:37:21

标签: asp.net-mvc forms-authentication

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

这是发生了什么

在ActionAttribute扩展

我检查s session var    如果没有找到        检查请求数据夹头             如果找到,设置会话var             如果找不到 - 重定向到外部URL    如果发现     继续。

麻烦的是,直到我更新到RC1,这才有效。从那时起,这么多请求被发送到外部URL,它检测到DoS攻击并关闭我!

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

3 个答案:

答案 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中删除重复请求来解决此问题。不是一个非常好的解决方案 - 所以如果有人想出更好的解决方案 - 请告诉我。