2009-02-06 30 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); 
     } 
    } 
}