developer tip

ASP.NET MVC의 권한 부여 특성

optionbox 2020. 12. 11. 08:04
반응형

ASP.NET MVC의 권한 부여 특성


[Authorize]ASP.NET MVC에서 특성의 실제 사용을 이해하는 데 어려움을 겪고 있습니다. 개념에 따라 [Authorize]속성 으로 컨트롤러 메서드를 장식하면 인증 된 사용자 만 컨트롤러에 액세스 할 수 있습니다.

컨트롤러를 [Authorize]특성으로 장식하지 않고 ASP.NET MVC 응용 프로그램을 개발했습니다 . 내가 관찰 한 것은 web.config 또는 다른 방법을 사용하여 응용 프로그램에서 인증 메커니즘을 올바르게 구현 {controller}/{action}/{id}하면 특정 작업 방법 의 URL 액세스 할 수 없다는 것 입니다.

시스템은 항상 로그인을 요청합니다. 이는 내 컨트롤러가 안전하다는 것을 의미합니다. 내 질문은 이것이 [Authorize]속성 을 사용하지 않고 컨트롤러를 보호 할 수있을 때 실제로 필요한 것은 무엇입니까?


진정한 힘은 역할 제공자와 함께 회원 제공자를 이해하고 구현하는 것입니다. 사용자를 역할에 할당 할 수 있으며 해당 제한에 따라 컨트롤러 작업 또는 컨트롤러 자체에 다른 사용자에 대해 다른 액세스 역할을 적용 할 수 있습니다.

 [Authorize(Users = "Betty, Johnny")]
 public ActionResult SpecificUserOnly()
 {
     return View();
 }

또는 그룹에 따라 제한 할 수 있습니다.

[Authorize(Roles = "Admin, Super User")]
public ActionResult AdministratorsOnly()
{
    return View();
}

[Authorize]속성을 사용하면 애플리케이션의 보안 허점을 방지 할 수 있습니다. MVC가 URL을 처리하는 방식 (즉, 실제 파일이 아닌 컨트롤러로 라우팅)은 web.config 파일을 통해 실제로 모든 것을 보호하기 어렵게 만듭니다.

자세한 내용은 http://blogs.msdn.com/b/rickandy/archive/2012/03/23/securing-your-asp-net-mvc-4-app-and-the-new-allowanonymous-attribute 에서 확인하세요 . aspx


사용하기가 더 편리하기 때문에 존재하며 xml 구성이 아닌 인증 매개 변수를 표시하는 속성을 사용하는 완전히 다른 이데올로기이기도합니다. 범용 구성이나 다른 인증 프레임 워크를 능가하기위한 것이 아니라 MVC의 방식 일뿐입니다. 나는 당신이 아마도 비 ... 단지 뛰어난 편의성에 불과한 기술적 기능 이점을 찾고있는 것 같기 때문에 이것을 말하는 것입니다.

BobRock은 이미 장점을 나열했습니다. 그의 대답에 덧붙여서, 또 다른 시나리오는이 속성을 동작뿐만 아니라 전체 컨트롤러에 적용 할 수 있다는 것입니다. 또한 동일한 컨트롤러의 다른 동작에 서로 다른 역할 인증 매개 변수를 추가하여 혼합 및 일치시킬 수 있습니다.


Authorize속성을 사용하는 것이 더 편리해 보이고 더 'MVC 방식'으로 느껴집니다. 기술적 이점에 관해서는 몇 가지가 있습니다.

내 마음에 드는 시나리오 중 하나는 앱에서 출력 캐싱을 사용할 때입니다. Authorize 속성은 잘 처리합니다.

다른 하나는 확장 성입니다. Authorize속성은 박스 필터의 단지 기본 알아,하지만 당신은 그 방법을 무시하고 내가 당신이 구성을 통해 그렇게 할 것입니다 방법을 모르겠어요 등 로깅과 같은 몇 가지 사전 승인 작업을 할 수 있습니다.


한 가지 장점은 응용 프로그램에 대한 액세스를 컴파일하므로 Web.config를 수정하는 사람이 실수로 변경할 수 없다는 것입니다.

이것은 당신에게 이점이 아닐 수도 있고 단점이 될 수도 있습니다. 그러나 어떤 종류의 액세스의 경우 선호 될 수 있습니다.

또한 Web.config의 권한 부여 정보가 정보를 더럽 히고 찾기가 더 어려워집니다. 그래서 어떤면에서는 그것의 선호도, 어떤면에서는 그것을 할 수있는 다른 방법이 없습니다.


web.config의 태그는 경로를 기반으로하는 반면 MVC는 컨트롤러 작업 및 경로와 함께 작동합니다.

로그인하지 않은 사용자를 막으려는 경우에는 별다른 차이가 없을 수 있지만 역할 기반 권한 부여를 적용하려고 할 때와 사용자 지정 처리를 원하는 경우에는 많은 차이를 만들 수있는 아키텍처 결정입니다. 승인되지 않은 유형.

첫 번째 경우는 BobRock의 답변에서 다룹니다.

사용자는 컨트롤러 또는 작업에 액세스하려면 다음 역할 중 하나 이상이 있어야합니다.

[Authorize(Roles = "Admin, Super User")]

사용자는 컨트롤러 또는 작업에 액세스 할 수 있도록이 두 역할을 모두 가져야합니다.

[Authorize(Roles = "Super User")]
[Authorize(Roles = "Admin")]

Controller 또는 Action에 액세스 할 수있는 사용자는 Betty와 Johnny입니다.

[Authorize(Users = "Betty, Johnny")]

ASP.NET Core에서 .NET을 통한 권한 부여에 클레임정책 원칙을 사용할 수 있습니다 [Authorize].

options.AddPolicy("ElevatedRights", policy =>
                  policy.RequireRole("Administrator", "PowerUser", "BackupAdministrator"));

[Authorize(Policy = "ElevatedRights")]

두 번째는 사례에 따라 다른 제한, 프로세스 및 처리로 인증을 구현해야 할 수있는 더 큰 응용 프로그램에서 매우 유용합니다. 이러한 이유로 AuthorizeAttribute를 확장 하고 프로젝트에 대해 다른 권한 부여 대안을 구현할 수 있습니다 .

public class CustomAuthorizeAttribute: AuthorizeAttribute  
{  
    public override void OnAuthorization(AuthorizationContext filterContext)  
    {  }
}

ASP.NET MVC에서 인증을 수행 하는 " 올바른 완료 "방법은 [Authorize]특성을 사용하는 것입니다.

참고 URL : https://stackoverflow.com/questions/10848086/authorize-attribute-in-asp-net-mvc

반응형