2017-01-07 1 views
5

.NET Core 1.1에서 API를 작성하고 있습니다. 모든 다른 컨트롤러가 상속하는 기본 컨트롤러에 개체를 HttpContext.User에서 빌드하고 인증을 기본적으로 사용하도록 설정합니다 (필요할 경우 [AllowAnonymous]로 수동으로 비활성화해야 함). User 개체에는 IsAdmin 속성이 있습니다. 지금은 사용자가 아래의 각 관련 기능의 맨 위에있는 관리자인지 확인 중이지만이 코드를 단순화하고 정리하는 사용자 정의 속성을 추가하는 방법이 있어야합니다..NET Core의 사용자 지정 권한

bool.Parse(HttpContext.User.FindFirst("IsAdmin")?.Value) 

이 대신 :

[HttpGet] 
public async Task<IActionResult> Get() 
{ 
    if (!User.IsAdmin) 
     return Forbid(); 

    // logic 
} 

내가이 (또는 비슷한)를 싶습니다

[AdminOnly] 
[HttpGet] 
public async Task<IActionResult> Get() 
{ 
    // logic 
} 

I 참고로

, User.IsAdmin이 속기입니다 빌드하려고 시도하는 source for [AuthorizeAttribute]을 보았습니다.하지만 쉘 일 뿐이므로 아야, 진짜 마술이 일어나는 곳.

어떻게하면됩니까?

+4

, 당신은 기본적를 사용 속성을 명명 된 정책으로 정의한 다음 시작시 정책을 정의하여 역할이나 클레임 또는 기타 규칙을 요구합니다. https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies –

+0

@blowdart (ASP.NET 핵심 보안 책임자)의 대답을 확인하면 자신의 특성을 만들지 않아야합니다. – Tseng

+0

@JoeAudette 필자가 원했던 것처럼 보였습니다. 내가 어떻게 그것을 놓쳤는 지 모릅니다. :/[Claims-based auth] (https://docs.microsoft.com/en-us/aspnet/core/security/authorization/claims#adding-claims-checks)는 작동합니다. 주장은 '사실'입니다. 이 질문을 답으로 추가하면 받아 들일 것입니다. – vaindil

답변

6

@JoeAudette에서 제안한 해결책이 가장 좋은 방법 인 것 같습니다.


Startup.cs에서 자신의 정책을 만듭니다

options.AddPolicy("PolicyName", p => 
{ 
    p.RequireAuthenticatedUser(); 
    p.RequireClaim("IsAdmin", true); <- your criteria here (claim type, claim value) ??? 
    p.Build(); 
}); 


은 그럼 그냥 속성으로 사용 : 나는 정책 기반 권한 부여에 대한 문서를 읽어 보시기 바랍니다

[Authorize("PolicyName")] 
관련 문제