3

Windows 인증을 사용하여 로그인 한 사용자를 확인하는 ASP.Net MVC 인트라넷 사이트가 있습니다 (아무런 브라우징도 허용되지 않음). 사용자가 처음 방문 할 때 연락처 개체 (예 : 이름, 전자 메일, 국가)에 대한 기본 정보를 수집하여 응용 프로그램 데이터베이스에 저장합니다.Windows 인증 및 SQL 멤버쉽 서비스

사이트 역할을 기반으로하고 싶기 때문에 각 사용자에게 역할 (사용자, 관리자 등)을 할당 할 수 있어야합니다. ADS 그룹을 사용하여이 작업을 수행 할 수 있지만 다소 중량이 많이 드는 것처럼 보입니다. ASP.Net에서 제공하는 SQL 멤버십 서비스를 사용하여 사용자 이름을 저장 한 다음 해당 사용자가 속한 역할을 저장하거나 암호 등을 수집해야합니까 (Windows 인증 사용의 요점을 무시할 수 있습니까?)? 또한 이것은 ASP.Net MVC [Authorize] 속성과 통합됩니까?

답변

7

"일반적인"ASP.NET에서이 조합 (Windows 인증 및 SQL for Roles)을 사용할 수 있습니다. 따라서 MVC에서도 가능해야합니다.

여기에 a link that might help입니다.

+0

매우 흥미로운 링크, 감사 리처드 :

여기에 실제로 작동 컴파일하고 해커에 의해 공격에 귀하의 웹 사이트를 노출하지 수있는 몇 가지 샘플 코드입니다. –

2

예, 가능합니다.

Authorize는 IPrincipal의 IsInRole 메서드를 사용하여 사용자가 지정된 역할 내에 있는지 확인합니다.

Global.asax 내의 AuthenticateRequest 이벤트 중에 IPrincipal의 기본 구현을 전환하여 구현할 수 있습니다.

private void Application_AuthenticateRequest(object sender, EventArgs e) 
{ 
    if (!Request.IsAuthenticated) 
    { 
     Context.User = new MyPrincipal { Identity = new MyIdentity 
       { Type = UserType.Inactive, Id = int.MinValue }}; 
     Thread.CurrentPrincipal = Context.User; 
    } 
    else 
    { 
     HttpCookie authCookie = Request.Cookies[ 
      FormsAuthentication.FormsCookieName]; 
     if (authCookie != null) 
     { 
      FormsAuthenticationTicket authTicket = 
        FormsAuthentication.Decrypt(authCookie.Value); 

      var identity = Db.GetIdentity(
       authTicket.Name, new HttpRequestWrapper(Request)); 
     Context.User = new MyPrincipal { Identity = new MyIdentity 
       { Type = UserType.Inactive, Id = int.MinValue }}; 
     Thread.CurrentPrincipal = Context.User; 
     } 
    } 
} 
+0

감사합니다. Will it I 'll it go! –