Context.사용자가 지는 역할을 한 후에 할당된 글로벌입니다.맨.Application_AuthenticateRequest

StackOverflow https://stackoverflow.com/questions/56271

문제

나는 양식을 사용하여 인증서 asp.net (3.5)응용 프로그램입니다.나는 또한 역할을 사용하여 정의는 사용자가 액세스할 수 있는 하위 디렉터리합니다.따라서,관련된 부분의 내 web.config 파일에 다음과 같이:

<system.web>
  <authentication mode="Forms">
    <forms loginUrl="Default.aspx" path="/" protection="All" timeout="360" name="MyAppName" cookieless="UseCookies"  />      
  </authentication>
  <authorization >
    <allow users="*"/>
  </authorization>
</system.web>

<location path="Admin">
  <system.web>
    <authorization>
      <allow roles="Admin"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</location>

무엇을 기반으로 읽었으며,이 있는지 확인해야만 사용자가 액세스할 수 있는 관리자 디렉토리가 있는 사용자 인증 및 할당 관리자 역할이 있습니다.

사용자 인증을 저장하는 인증권,기타 관련 문제됩니다.를 제거하는 경우 이 범주에서는 웹.config 파일에 모두 잘 작동합니다.문제 때 온도를 적용하는 사용자와 관리자 역할을 해야 하에 액세스할 수 있는 관리자 디렉토리에 있습니다.

이에 따라 MS KB 문서 와 함께 다른 웹페이지 주는 동일한 정보를 추가하려면 다음 코드를 내 글로벌입니다.맨 file:

protected void Application_AuthenticateRequest(Object sender, EventArgs e) {
    if (HttpContext.Current.User != null) {
        if (Request.IsAuthenticated == true) {    
            // Debug#1            
            FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(Context.Request.Cookies[FormsAuthentication.FormsCookieName].Value);
            // In this case, ticket.UserData = "Admin"                
            string[] roles = new string[1] { ticket.UserData }; 
            FormsIdentity id = new FormsIdentity(ticket);
            Context.User = new System.Security.Principal.GenericPrincipal(id, roles);
            // Debug#2
        }
    }
}

그러나 빠르게 액세스할 수 있습니하는 로그에,나는 액세스 할 수없는 관리자의 폴더(로 리디렉션 로그인 페이지).

하려고 문제를 디버깅하면 단계를 통해 요청하는 경우에,실행 Context.사용자.IsInRole("관리자")라인에 표시 Debug#1 위를 반환하며 거짓입니다.면 나는 실행하여 동일한 성명서 선 Debug#2,true.그래서 적어도 마찬가지로 지금까지 세계.맨 관한 역할을 제대로 지정됩니다.

후 글로벌입니다.맨,실행프로 오른쪽 로그인 페이지(의 부족 때문에 역할 페이지 원인에서 부하 관리할 폴더를 거부하).그러나 때,내가 실행하여 동일한 문의 첫 번째 줄에 Page_Load 로그인,false 를 반환합니다.그래서 어딘가에 후 Application_AuthenticateRequest 에서 글로벌입니다.맨고의 초기 로드 웹 양식에서 제한된 디렉토리,역할,정보가 손실되는 것의 원인,인증이 실패하는(주의:에 Page_Load,적절한 인증 티켓은 여전히 할당된다.사용자.Id-만 역할을 잃).

나는 무엇을 잘못하고,그리고 그것을 얻을 수있는 방법을 제대로 작동?


업데이트:나는 입력 아래의 솔루션

도움이 되었습니까?

해결책

여기에 문제가와 솔루션:

이전 개발에 갔 웹사이트 메뉴를 클릭 Asp.net 구성됩니다.이 결과는 다음과 같은 줄을 추가 할 수 있습니다.config:

<system.web>
  <roleManager enabled="true" />
</system.web>

에서는 시점에,응용 프로그램이었다고 가정하면 내가 하는 역할을 통해 Asp.net 사이트 관리자가를 통해 FormsAuthentication 역할을 수행합니다.따라서 실패를 반복이라는 사실에도 불구하고,실제 인증과 역할에 논리가 올바르게 설정 합니다.

이 라인에서 제거되었다.config 모든 것이 완벽하게 작동했습니다.

다른 팁

이것은 단지 임의의 촬영지만,당신은 당신이 차단되기 때문에 위의 권한 부여에 대한 관리?어쩌면 전환을 시도하고 당신의 거부하든 당신의 모든 관리에 있습니다.

그냥 경우에 덮어지고에 의하여 거부합니다.

(나는 코드 샘플을 여기에서 그러나지 않았을 보여주는다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top