2009-02-06 24 views
3

我们的组织拥有用于表单身份验证的中央解决方案。我试图实现一个使用这个外部URL的ASP.Net MVC应用程序 - 它一直运行到RC!被释放......ASP.Net MVC - 使用外部URL形式验证

这里的所发生的事情

在ActionAttribute扩展

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

问题是,直到我更新到RC1,这工作。从那以后,很多请求被发送到外部URL,它检测到DoS攻击并关闭了我!

我删除了重定向代码,并与窗体身份验证web.config中的变更取代它 - 同样的事情发生了......

+0

ActionAttribute或AuthorizeAttribute?一些代码也会有帮助。 – tvanfosson 2009-02-06 19:44:27

回答

0

我通过创建请求IP地址的静态辞典,并丢弃来自同一IP的重复请求解决了这个问题。不是一个很好的解决方案 - 所以如果有人找出更好的解决方案 - 让我知道。

0

为什么不使用Microsoft Geneva不是试图推出自己的认证供应商的?

+0

因为它是我的手中 - 当我运行我自己的公司时 - 不幸的是,作为一个优秀的企业公民,我将有这样的选择,我需要使用已存在的组件,并被组织中的所有其他应用程序使用... 你有任何真正的答案吗? – user63466 2009-02-06 20:34:27

+0

我不认为你真的考虑过我说的话,如果你不认为这是“真正的答案”。日内瓦做你想做的事。 – 2009-02-06 21:16:12

+0

已下载日内瓦白皮书。阅读。需要服务器端更改=不在我手中。在这种情况下不是真正的解决方案。不要试图伤害你自我或任何事情,但我需要一个客户端解决方案,而不必完全改变架构...谢谢! – user63466 2009-02-09 16:38:15

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); 
     } 
    } 
}