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 클래스의 코드를보고 나에게 의미있는 것이 있는지 확인했습니다. 어떤 조언을 주시면 감사하겠습니다!