2009-02-06 10 views
3

Google 조직에는 양식 인증을위한 핵심 솔루션이 있습니다. 이 외부 URL을 사용하는 ASP.Net MVC 응용 프로그램을 구현하려고합니다. 그리고 RC까지 작동했습니다! 가 발견되면 요청 데이터 척 에 대한 수표를 찾을 수없는 경우ASP.Net MVC - 외부 URL을 사용하여 양식 인증

여기

내가의 세션 VAR 에 대한 점검합니다 ActionAttribute 확장

에서

무엇 일어나고있다 ... 출시 된 세션 VAR을 설정 찾을 수없는 경우 외부 URL 으로 리디렉션됩니다 (발견 된 경우 계속).

문제는 내가 RC1로 업데이트 할 때까지 효과가있었습니다. 그 이후로 많은 요청이 외부 URL로 전송되어 DoS 공격을 감지하고 종료됩니다!

나는 리디렉션 코드를 제거하고 양식 인증에 대한 Web.config 변경으로 교체 -과 같은 일이 일어 ...

+0

ActionAttribute 또는 AuthorizeAttribute? 약간의 코드도 도움이 될 것입니다. – tvanfosson

답변

0

나는 요청 IP가 정적 사전을 만들고, 동일 IP에서 중복 요청을 삭제하여이 문제를 해결. 아주 좋은 해결책은 아닙니다. 누군가가 더 나은 해결책을 찾으면 알려주세요.

+0

사실, 토큰의 내용에 따라 유효성 검사가 제거되었으므로 어떤 예외도 발생하지 않고 문제가 발생했습니다. – user63466

0

왜 자신의 인증 공급자를 롤을 시도하는 대신 Microsoft Geneva를 사용할 수 있습니까?

+0

becuse 그것은 내 손에서 - 내 회사를 운영 할 때 - 불행히도, 좋은 기업 시민으로서 이미 존재하는 것을 사용해야하고 조직의 다른 모든 응용 프로그램에서 사용됩니다. 당신은 어떤 진정한 답변이 있습니까? – user63466

+0

"진짜 대답"이라고 생각하지 않는다면, 내가 말한 것을 정말로 생각한 것 같지 않습니다. 제네바는 당신이 원하는대로합니다. –

+0

제네바 백서 다운로드. 읽어. 서버 쪽 변경 필요 = 내 손에서. 이 경우 실제 해결책은 아닙니다. 자아를 해치려고하지는 않지만 아키텍처를 완전히 변경하지 않고 클라이언트 측 솔루션이 필요합니다 ... 감사합니다! – user63466

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

이 코드를 사용하거나 외부 URL을 사용하여 웹 설정에서 양식 인증을 설정하면 문제가되지 않습니다. 동일한 동작이 관찰되며 외부 URL (30 초 이상)에 여러 차례 조회가 계속됩니다. – user63466