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);
}
}
}
물론 클레임에 컨트롤러-액션-동사 삼중 항을 사용하는 것에 만족한다면 유형 및 값 매개 변수를 제거 할 수 있습니다.
- 클레임을 구체적으로 확인하지 않고 작업 / 리소스 쌍을 확인합니다. 실제 클레임 / 데이터 확인을 권한 부여 관리자로 가져옵니다. 우려의 분리.
- 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
'Nice programing' 카테고리의 다른 글
argc가 오버플로 될 수 있습니까? (0) | 2020.10.19 |
---|---|
Windows에서 큰 텍스트 파일을 읽는 방법은 무엇입니까? (0) | 2020.10.19 |
std :: transform 및 유사하게 'for'루프 증분을 (void)로 캐스팅하는 이유는 무엇입니까? (0) | 2020.10.19 |
기본 유형 '짧은'-Java로 캐스팅 (0) | 2020.10.19 |
SQL Server Management Studio에서 커서가있는 문만 실행하려면 어떻게해야합니까? (0) | 2020.10.19 |