7

ASP.NET MVC를 기존 WebForms 응용 프로그램에 추가하고 있습니다. 당분간은이 부분이 기존 코드 (양식 인증)에 의해 처리되므로 인증/로그인에 신경 쓰지 않습니다.ASP.NET MVC3의 권한 기반 권한 부여

기존 WebForms 응용 프로그램에는 페이지 당 완전히 사용자 정의 권한 기반 승인이 있습니다. 따라서 각 사용자에게는 액세스가 허용 된 페이지가 나열된 권리 집합이 있습니다.
이제 동일한 권한 시스템을 사용하여 특정 MVC 컨트롤러 및 작업에 대한 액세스를 제한 할 수있는 방법을 결정해야합니다.

알다시피, ASP.NET MVC에는 역할을 지정할 수있는 표준 AuthorizeAttribute이 있습니다. 또한 지정 권한 대신의 역할을 제안 몇 가지 기사를 발견 - 다음은 같은 것을 할 수있다 :

[CustomAuthorize(Roles = "View products, Edit products")] 

AuthorizeAttribute을 확장함으로써, 나는 또한 저장 및 액세스 권한을 어떻게 정의 할 수 있습니다.

이 솔루션은 나를 수용 할 수 있습니다 (역할의 의미를 변경하더라도 약간의 냄새가납니다).
하지만 커밋하기 전에 다른 옵션이 있는지 확인하고 싶습니다. 그리고 그게 내가 꼼짝 못하는 곳입니다. ASP.NET MVC에서 권한 부여에 대한 다양한 접근법에 대한 전체적인 개요를 찾지 못했습니다. 또한 폼 인증, 멤버 자격 공급자, 권한 부여 특성, IPrincipal 등과 같은 모든 보안 개념이 서로 어떻게 관련되어 있고 어떻게 함께 작동해야하는지 알고 싶습니다.

+0

여기에서 시도한 내용과 비슷합니까? http://stackoverflow.com/questions/10338734/custom-security-scenario-in-asp-net-mvc/ – antijon

+0

@antijon 내가 이해하는 한, 비슷한 내용입니다. 사용자 정의 AuthorizeAttribute를 구현합니다. 그러나 나는 다른 옵션과 장단점에 대해 더 자세히 알아보고자한다. –

답변

7

WebForms와 매우 흡사 한 점은 MVC에 파이프 라인이 있다는 것입니다. 각 요청은 여러 가지 방법을 거치며 길을 따라 확장 지점이있어서 "후크"를 걸고 작업을 수행 할 수 있습니다.

모든 AuthorizeAttribute는 OnAuthorization 확장 점에 연결하여 제공 한 기준 (사용자 이름, 역할 등)에 따라 액세스 권한을 부여할지 여부를 결정합니다.

다음은 예입니다 : http://geekswithblogs.net/brians/archive/2010/07/08/implementing-a-custom-asp.net-mvc-authorization-filter.aspx

당신은 사용자 정의 권한 부여 특성을 작성하고 자신의 기준을 정확히 같은 일을 할 수 있습니다. Roles 매개 변수를 다시 사용할 필요가 없으며 원하는 경우 모두 만들 수 있습니다.

이것은 MVC가 선호하는 방법입니다. 또 다른 좋은 점은 필터를 필터로 만들면 전역 필터에 추가하여 원하는 경우 모든 항목에 적용 할 수 있다는 것입니다.

기본적으로 다른 두 가지 선택 사항이 있습니다. Application_AuthenticateRequest (권장되지 않음)의 global.asax에 핸들러를 구현하거나 OnAuthorize를 재정의하는 공통 BaseController를 작성하십시오 (속성은 다른 곳에서도 동일한 작업을 수행합니다).

많은 사람들이 세션 변수를 사용하여 인증을 시도하지만, 그 중 가장 나쁜 일입니다.

인증 및 권한 시스템에 대해 잘 모르기 때문에 일반적인 조언을 제공합니다.

+0

대답 해 주셔서 감사합니다!인증과 관련하여 Forms 인증을 통해 사용자 정의 사용자 클래스를 사용하는 사용자 이름/비밀번호 로그인 일뿐입니다. 권한 시스템과 관련하여 - 각 페이지에 대해 "모듈 키"가 정의되어 있으며 각 사용자가 각 페이지에 액세스 할 수 있도록 데이터베이스 권한을 저장합니다. 권한 확인은 현재'BasePage : Page'에 구현되어 있습니다. 그것이 당신이 알고 싶어하는 정보인지 확실하지 않습니다. –