代码之家  ›  专栏  ›  技术社区  ›  user63466

ASP。Net MVC-使用外部URL进行身份验证

  •  3
  • user63466  · 技术社区  · 16 年前

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

    事情是这样的

    在ActionAttribute扩展中

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

    问题是,直到我更新到RC1,这才奏效。从那以后,有太多的请求被发送到外部URL,以至于它检测到DoS攻击并将我拒之门外!

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

    3 回复  |  直到 16 年前
        1
  •  0
  •   Craig Stuntz    16 年前

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

        2
  •  0
  •   user63466    16 年前

    代码:

    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);
            } 
        }
    }
    
        3
  •  0
  •   user63466    16 年前

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