ASP.NET 코어 정체성에 대한 요구 사항 : 다음과 같은 기본 핸들러와계층 정책/난 그냥 ASP.NET 핵심 아이덴티티로 시작하고있어 다음과 같은 요구 사항이 정의
public sealed class IsCustomerUserRequirement : IAuthorizationRequirement
public sealed class IsSuperUserRequirement : IAuthorizationRequirement
:
public class IsCustomerUserHandler : AuthorizationHandler<IsCustomerUserRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, IsCustomerUserRequirement requirement)
{
if (context.User.HasClaim(_ => _.Type == "customer"))
{
context.Succeed(requirement);
}
return Task.CompletedTask;
}
}
public class IsSuperUserHandler : AuthorizationHandler<IsSuperUserRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, IsSuperUserRequirement requirement)
{
if (context.User.IsInRole("super_user"))
{
context.Succeed(requirement);
}
return Task.CompletedTask;
}
}
services
.AddAuthorization(options =>
{
options.AddPolicy("MustBeSuperUser", policy => policy.Requirements.Add(new IsSuperUserRequirement()));
options.AddPolicy("CustomersOnly", policy => policy.Requirements.Add(new IsCustomerUserRequirement()));
});
을 그리고을 사용하여 적용
나는 그 기본 방침 안에이를 넣을 수 있습니다, 잘 작동합니다.
내 요구 사항 슈퍼 사용자를 허용 할 수있다, 또한 만 지역 고객에 액세스 할customer
주장하지 않고 super_user
역할을하지만 와 원칙을 주장한다.
나는 현재 수동으로 확인하기 위해 핸들러를 변경하여이 구현 한 :
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, IsCustomerUserRequirement requirement)
{
if (context.User.HasClaim(_ => _.Type == Claims.Customer) ||
context.User.IsInRole(Roles.SuperUser))
{
context.Succeed(requirement);
}
return Task.CompletedTask;
}
내 문제 내가 요점 것 같은이 느낌입니다. 앞으로는 각 처리기에서 수퍼 유저 수표를 반복 할 필요가 없도록 이것을 정의하는 더 좋은 방법이 있습니까?
더 큰 그림은 IdentityServer4 (ASP.NET Identity-backed)를 사용하여 인증 한 다음 몇 가지 JWT 기반 클레임 (하나의 클레임, 두 가지 역할)을 사용하여 사용자를 더욱 식별합니다. 응용 프로그램 별 역할/권한 구조 및 Identity Server와 관련이없는 사용자 정의 미들웨어 등이 있습니다. 이 주제에 대해 모범 사례가 있다면 무엇이 있을까요?
netcore에서 권한 부여를 수행하는 새로운 정책 기반 방법이 세분화 된 권한을 가질 때 약간 비합리적인 것으로 나타납니다. 우리는 권한 부여를 처리하기 위해 커스텀 액션 필터 (IAsyncActionFilter'를 상속)를 구현하고, 시작시 설정할 필요가있는 정책들을 사용하는 것보다 좀 더 유연성을 부여했습니다. 사용자는 소유권 주장의 단순한 변형으로 인해 동일한 정책의 X 변형을 원하지 않습니다. – scheien
@scheien 동일한 정책의 변형이 여러 개인 경우 정책 및 요구 사항이 잘못 사용됩니다. 정책에는 일련의 요구 사항이 필요합니다. 이러한 요구 사항은 다양한 요구 사항 조합에 의해 (개별적으로) 충족 될 수 있으며, 요구 사항 처리자가 알아낼 수 있습니다. 그러나 이것이 정책을보다 복잡하게 만들지는 않습니다. - 정확한 상황을 설명하는 질문을 게시하면 새 모델에 맞게 간소화 할 수 있습니다. ASP.NET 핵심 인증 스택은 실제로 매우 깨끗하고 강력합니다. – poke