2014-04-07 3 views
1

Azure ASC를 사용하여 사용자를 인증하기 위해 WIF를 사용하는 MVC 백엔드가있는 Angular JS 응용 프로그램이 있습니다. MVC 컨트롤러에는 [Authorize] 특성이 있으므로 인증되지 않은 사용자가 인증이 필요한 페이지에 액세스하려고하면 401 오류가 발생합니다.Internet Explorer가 로그 아웃시 인증되지 않은 페이지로 리디렉션되지 않음

그래서 과정은 다음과 같다 : Home/Index

  • 각도 httpInterceptor가 401에 집어와 $ location.path를 사용하여 무단 (로그인) 페이지로 리디렉션 401 오류를 수신 액세스 할 수

    1. 시도를 ("/ unauthorized");
    2. 사용자가 로그인 버튼을 클릭하고 인증을 위해 Azure ACS로 리디렉션됩니다.
    3. 인증 성공 후 사용자는 인증 토큰을 사용하여 사이트로 다시 연결되며 보호 된 리소스에 액세스 할 수 있습니다.

    각도 httpInterceptor :

     // On response failture 
         responseError: function (rejection) 
         { 
          // console.log(rejection); // Contains the data about the error. 
          if (rejection.status == 401) 
          { 
           $location.path("/unauthorized"); 
           return $q.when(rejection); 
          } 
          // Return the promise rejection. 
          return $q.reject(rejection); 
         } 
    

    처음 예상대로 모든 브라우저의 행동 페이지를로드합니다.

    로그 아웃 할 때 문제가 발생합니다. IE를 제외한 모든 브라우저에서 다음이 발생합니다.

    1. 로그 아웃 URL로 리디렉션하여 싱글 사인 아웃을 수행합니다. 로그 아웃 한 후
    2. 기본 페이지로 다시 리디렉션하지만 난 이제 더 인증 토큰이 없기 때문에 나는 401 IE를 사용할 때이

    그러나 무단 (로그인) 페이지로 이동하고 401

  • 를받을 위의 2 단계에서 발생하지 않습니다. 그래서 서명이 발생하지만 기본 페이지가로드됩니다.

    @if (User.Identity.IsAuthenticated) 
    { 
        //load angular files here 
    } 
    

    을 나는 401이 발생하지 않는 것을 볼 수 있습니다 피들러에 무슨 일이 일어나고 있는지를 볼 때 : 나는 다음과 면도기 문 내부의 각 컨트롤러, 서비스 및 지침을 모두로드하기 때문에 각 스크립트의 아무도는로드하지 IE http://i.imgur.com/Of53mEY.png

    하지만 다른 브라우저와 함께 않습니다 :

    http://i.imgur.com/g1GmVw3.png

    이유는 (401)은 다른 브라우저처럼 IE에서 발생하지 않는 이유는 무엇입니까?

  • 답변

    0

    일부 각도 파일을 아래 명령문 밖으로 이동하여 문제를 해결할 수있었습니다.

    @if (User.Identity.IsAuthenticated) 
    { 
        //load angular files here 
    } 
    

    왜 IE가 다른 브라우저가 아닌 리다이렉트를하기 전에 필요한지 잘 모르겠습니다.