2009-12-01 4 views
5

AuthorizeAttribute를 사용하여 내 액션에 대한 액세스를 허용 할 사용자를 제어하고 싶습니다. 나는 단지 내 논리가 정돈되어 있음을 분명히 밝히고 싶다. ASP.Net MVC 멤버십

  1. 은 내가 보안 컨트롤러의 로그인 액션에 사용자의 자격 증명을 게시 IPrincipal
  2. 내 자신의 구현을 작성합니다.
  3. 은 내가 UserService 클래스를 사용하여 자격 증명을 확인하고 IPrincipal는
  4. 가 AuthorizeAttribute을 상속 내 WebAuthorizeAttribute는, 현재
  5. 을 확인 HttpContext.User 내 UserService 클래스에서 반환 지정 HttpContext.User.Identity.IsAuthenticated 및 HttpContext.User.IsInRole 사용자가 조치에 대한 액세스 권한이 있는지 판별하십시오.

일반적인 흐름입니까? MembershipProvider를 상속받을 수는 있지만 모든 기능이 필요하지는 않습니다. 실제로는 두 가지 역할로 로그인 할 수 있습니다.

답변

4

IPrincipal을 어딘가에 저장하고 요청할 때마다 복원해야합니다.

ASP.NET 2.0 Forms authentication - Keeping it customized yet simple

당신이 여기 다른 솔루션을 찾을 수 있습니다 : propably

Where to store logged user information on ASP.NET MVC using Forms Authentication?

및 다른 많은 StackOverflow의 질문 :

당신이있는 FormsAuthentication를 사용합니다 경우이 좋은 솔루션입니다 수정

MyBusinessLayerSecurityClass.CreatePrincipal (ID, id.Name) :이 페이지 읽어야

:

http://msdn.microsoft.com/en-us/library/aa480476.aspx

는 특히이 :

가 FormsAuthenticationModule 클래스는 을 구성 GenericPrincipal 개체 및 st HTTP 컨텍스트에 있습니다. GenericPrincipal 목적은 현재 인증 된 사용자를 나타내는 FormsIdentity 인스턴스에 대한 참조를 보유하고있다. 이 작업을 관리하려면 양식 인증을 허용해야합니다. 가 IPrincipal 인터페이스를 구현하도록 같은 특정 요구 사항이 응용 프로그램이 사용자 정의 클래스에 사용자 속성을 설정하는 경우, 응용 프로그램은 PostAuthenticate 이벤트를 처리해야합니다. PostAuthenticate 이벤트 가 FormsAuthenticationModule 후 는 폼 인증 쿠키를 검증하고 GenericPrincipal와 FormsIdentity 개체 발생 만들었다. 이 코드 내에서 사용자 정의 IPrincipal FormsIdentity 개체, 를 래핑하고 있는 HttpContext에 저장 객체 를 구성 할 수 있습니다. 사용자 속성

인증 쿠키를 설정하면 FormsIdentity가 자동으로 관리됩니다. 당신이해야 할 일은 IPrincipal에서 마무리하는 것뿐입니다. 이 모든 일은 HttpContext.Current.User 속성 이 null이 아니며 (바로 뒤에 대체하는 GenericPrincipal) 일 때 발생합니다. HttpContext.Current.User가 null 인 경우 이전에 생성 된 인증 쿠키가 없으며 사용자가 인증되지 않았습니다.

+0

많은 질문과 외부 블로그를 읽었지만 실제로이 모든 부분을 문맥에 넣는 것 같지는 않습니다. – scottm

+0

MyBusinessLayerSecurityClass.CreatePrincipal (id, id.Name) 부분을 설명 할 수 있습니까? HttpContext.Current.User 속성이 null 인 경우 FormsIdentity를 얻는 방법을 이해하지 못합니다. – scottm

2

나는 다음은 전형적인 믿습니다 :

  1. 은 내가 보안 컨트롤러의 로그인 액션에 사용자의 자격 증명을 게시 IPrincipal
  2. 내 자신의 구현을 작성합니다.
  3. UserService 클래스로 자격 증명의 유효성을 검사하고 은이 사용자에 대한 식별 정보가있는 쿠키를 구성합니다.. 일반적으로 FormsAuthentication.SetAuthCookie 또는 해당 클래스의 유틸리티 메서드 조합이 사용됩니다.
  4. Application AuthenticateRequest 이벤트에서 쿠키를 검사하고 Context.User를 할당하십시오. 참고 :이 값은 AuthenticateRequest 이벤트 다음에 Thread.CurrentPrincipal에 자동으로 할당됩니다. 이것은 일회성 과제이므로이 값은 자동으로 동기화되지 않습니다.
  5. AuthorizeAttribute를 상속받은 My WebAuthorizeAttribute는 현재 HttpContext.User.Identity.IsAuthenticated 및 HttpContext.User.IsInRole을 검사하여 사용자가 작업에 대한 액세스 권한이 있는지 확인합니다.
+1

+1 : 그게 내가하는 일이다. 내 게시물은 쿠키를 검사하는 방법을 설명합니다. – LukLed

+0

우수, 입력 해 주셔서 감사합니다. – scottm

관련 문제