Nice programing

Authorize 속성의 MVC5 클레임 버전

nicepro 2020. 10. 19. 12:44
반응형

Authorize 속성의 MVC5 클레임 버전


MVC5 및 새로운 OWIN 인증 미들웨어를 사용하여 VS2013 RC의 새로운 기능을 시도하고 있습니다.

따라서 [Authorize]역할별로 작업을 제한하기 위해 특성 을 사용하는 데 익숙 하지만 클레임 / 활동 기반 권한 부여를 사용하려고하는데 이에 상응하는 특성을 찾을 수 없습니다.

내가 놓친 명백한 것이 있습니까 아니면 직접 굴려야합니까? 상자에서 하나가 나올 것으로 예상했습니다.

내가 구체적으로 찾고있는 것은 [Authorize("ClaimType","ClaimValue")]내가 생각 하는 라인에 따른 것 입니다.

미리 감사드립니다.


나는 그것을 처리하기 위해 간단한 속성을 작성했습니다. 많은 추가 구성 없이는 프레임 워크에서 즉시 아무것도 찾을 수 없었습니다. 아래에 나열되어 있습니다.

public class ClaimsAuthorizeAttribute : AuthorizeAttribute
{
    private string claimType;
    private string claimValue;
    public ClaimsAuthorizeAttribute(string type, string value)
    {
        this.claimType = type;
        this.claimValue = value;
    }
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        var user = filterContext.HttpContext.User as ClaimsPrincipal;
        if (user != null && user.HasClaim(claimType, claimValue))
        {
            base.OnAuthorization(filterContext);
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
    }
}

물론 클레임에 컨트롤러-액션-동사 삼중 항을 사용하는 것에 만족한다면 유형 및 값 매개 변수를 제거 할 수 있습니다.


  1. 클레임을 구체적으로 확인하지 않고 작업 / 리소스 쌍을 확인합니다. 실제 클레임 / 데이터 확인을 권한 부여 관리자로 가져옵니다. 우려의 분리.
  2. MVC와 ClaimsPrincipalPermission은 잘 일치하지 않습니다. SecurityException이 발생하며 단위 테스트에 적합하지 않습니다.

내 버전은 다음과 같습니다. http://leastprivilege.com/2012/10/26/using-claims-based-authorization-in-mvc-and-web-api/


클레임과 함께 역할 및 사용자와 함께 Authorization 특성을 계속 사용할 수 있음을 발견했습니다.
이것이 작동하려면 ClaimsIdentity에 2 개의 특정 클레임 유형이 포함되어야합니다.

    ClaimTypes.Name

    ClaimTypes.Role

그런 다음 OAuthAuthorizationServerProvider에서 파생 된 클래스에서 사용하는 GrantXX 메서드에서 ClaimsIdentity를 만들 때이 2 개의 클레임을 추가합니다.

예:

    var oAuthIdentity = new ClaimsIdentity(new[]
    {
        new Claim(ClaimTypes.Name, context.ClientId),
        new Claim(ClaimTypes.Role, "Admin"),
    }, OAuthDefaults.AuthenticationType);

그런 다음 모든 작업에서 [Authorize(Roles ="Admin")]액세스를 제한 하는 사용할 수 있습니다.


[ClaimsPrincipalPermission(SecurityAction.Demand, Operation="Delete", Resource="Customer")]
public ActionResult Delete(int id)
{
    _customer.Delete(id);
    return RedirectToAction("CustomerList");
}

ClaimsPrincipalPermissionAttribute 클래스

참고 URL : https://stackoverflow.com/questions/19363809/mvc5-claims-version-of-the-authorize-attribute

반응형