3

Windows 인증을 사용하여 MVC 인트라넷 응용 프로그램의 특정 컨트롤러에서 MVC Authorize 특성을 사용하려고합니다. IIS 7.5는 Windows 인증 만 사용하도록 설정되고 익명 액세스는 web.config에서 해제됩니다. 도메인에 인증되었습니다. 그러나 컨트롤러에 대한 작업이 실행될 때 자격 증명을 묻는 메시지가 계속 표시됩니다. 브라우저 설정 (IE9)을 점검하고 현재 Windows 자격 증명으로 자동 로그인하도록 설정되었습니다.HttpContext.Current.Request.LogonUserIdentity.Groups가 다른 결과를 반환합니다.

사용자 정의 권한 부여 클래스를 작성하여 무슨 일이 일어나고 있는지 확인하려고했습니다. AuthorizeCore 내부에서 httpContext를 사용하여 내 사용자 이름과 그룹 구성원을 확인했습니다. 내가 속한 그룹이 System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups에없는 것을 발견했습니다. authorizecore가 false를 반환하고 자격 증명에 대한 프롬프트가 나타나면 현재 로그인 한 것과 동일한 자격 증명을 제공하고 AuthorizeCore가 다시 실행됩니다. 이번에는 모든 적절한 그룹이 발견되고 물론 AuthorizeCore 기반으로 사용자를 인증하고 모든 것이 잘 작동합니다. 여기에 내가 만든 사용자 지정 권한 클래스는 그래서

public class MyAuthorize : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     bool chk = httpContext.User.IsInRole("mydomain\\heavyequipadmin"); 

     // this is just to see what AD groups are provided for the current user 
     ArrayList groups = new ArrayList(); 
     foreach (System.Security.Principal.IdentityReference group in System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups) 
     { 
      groups.Add(group.Translate(typeof(System.Security.Principal.NTAccount)).ToString()); 
     } 

     // just run the base method to Authorize 
     return base.AuthorizeCore(httpContext); 
    } 
} 

내 전체 컨트롤러의 속성은 다음과 같습니다

[MyAuthorize(Roles = "mydomain\\HeavyEquipAdmin")] 

하나는 다른 것은, Web.config의에서 역할 관리자는 다음과 같습니다

<roleManager defaultProvider="AspNetWindowsTokenRoleProvider" /> 

이것이 어떻게 작동해야하는지에 대해 이해하지 못하는 것이 있습니까? 나는 단순히 인증/승인이 광고에 의해 처리되기를 원한다. 나는 MVC에서 상당히 새롭고 정직하게 모든 인증/권한 부여 체계를 구성한다. MVC 3의 소스를 다운로드하여 AuthorizeAttribute 클래스의 코드를보고 나에게 의미있는 것이 있는지 확인했습니다. 어떤 조언을 주시면 감사하겠습니다!

답변

3

사용자가 여기에서 역할을 수행합니다. IIS 익명 사용자의 경우 허용되는 경우 System.Web.HttpContext.Current.Request.LogonUserIdentity.Name은 IIS에서 익명 사용자로 구성됩니다. 그렇지 않으면 현재 로그인 한 사용자가 걸립니다.