ASP.NET Core의 정책 기반 액세스 컨트롤 (PBAC)을 사용하여 JSON 웹 토큰을 사용하여 권한/속성 기반 액세스 제어 (ABAC)를 구현하기위한 도우미 라이브러리.
열거적인 권한 만들기 :
public enum Permissions
{
Create = 0 ,
Read = 1 ,
Update = 2 ,
Delete = 3 ,
}각 권한에 대한 정확한 기본 값을 갖는 것이 중요합니다.이를 엉망으로 만드는 것은 저장된 권한을 엉망으로 만들 것입니다!
또한 int 기본 유형 (기본값)으로 한 열거 만 지원됩니다.
PermissionSet 사용하여 ID가 귀하의 Identity 제공 업체 내에서 사용자 권한 값을 설정하십시오.
user . Claims [ ClaimNames . Permissions ] = new PermissionSet < Permissions > ( new [ ]
{
Permissions . Create ,
Permissions . Read ,
} )
. ToCompactString ( ) ;위와 동일한 클레임 이름으로 허가 정책 요구 사항 처리기를 추가하십시오.
services . AddPermissionBasedAuthorization < Permissions > ( options =>
options . PermissionsClaimName = ClaimNames . Permissions ) ; 앱에서 권한 부여 DefaultPolicy 다시 정의하면 권한 정책이 새 기본 정책을 물려 받도록 논리 후 위의 코드를 삽입해야합니다.
(선택적으로) 특정 권한이 열거 된 유형과 함께 AuthorizePermission<T> 를 상속합니다.
public class AuthorizePermissionAttribute : AuthorizePermissionAttribute < Permissions >
{
public AuthorizePermissionAttribute ( Permissions permission )
: base ( permission )
{ }
}또는 최소 API를 사용하는 경우 확장 방법을 만듭니다.
public static TBuilder RequirePermission < TBuilder > ( this TBuilder builder , Permissions permission )
where TBuilder : IEndpointConventionBuilder
{
if ( builder == null )
throw new ArgumentNullException ( nameof ( builder ) ) ;
return builder . RequireAuthorization ( new AuthorizePermissionAttribute < Permissions > ( permission ) ) ;
} AuthorizePermission<T> (또는 위의 생성 된) 속성으로 컨트롤러/엔드 포인트를 장식하십시오.
[ HttpGet ]
[ Authorize ( Permissions . Read ) ]
public IActionResult Get ( )
=> Ok ( ) ;또는 최소 API를 사용하는 경우 :
app . MapGet ( "/" , ( ) => Results . Ok ( ) )
. RequirePermission ( Permissions . Read ) ; 권한 세트는 16 진수로 문자열로 직렬화됩니다. 여기서 n -th 비트는 기본 값 n 의 허가의 존재를 나타냅니다.
예를 들어 다음과 같은 권한 열거를 고려하십시오.
public enum Permissions
{
Create = 0,
Read = 1,
Update = 2,
Delete = 3,
Manage = 4,
}
그런 다음 위의 모든 권한을 포함하는 세트의 이진 표현은 다음과 같습니다.
1 F - permission string
┌┬┬┤ ┌┬┬┤
0001 1111 - permission bit values
││││ ││││
7654 3210 - bit positions
└┬┘│ ││││
│ │ │││└ Create
│ │ ││└ Read
│ │ │└ Update
│ │ └ Delete
│ └ Manage
└ Not used
사제화를 위해, 위는 반전 된 순서로 수행됩니다.
또한 열거 값을 기준으로 확인해야 할 특정 비트 위치를 계산할 수 있으므로 단일 권한을 확인할 때 전체 문자열을 사로화 할 필요가 없습니다.
소형 문자열에서 단일 권한 값을 확인합니다.
| 방법 | 평균 | 오류 | stddev | 할당 |
|---|---|---|---|---|
| 권한 _haspermission | 74.17 ns | 1.382 ns | 1.225 ns | - |
사용자 확인 청구 목록에 필요한 권한이 있습니다.
| 방법 | 평균 | 오류 | stddev | 할당 |
|---|---|---|---|---|
| repmissionAuthorizationHandlerBenchmark_handlerequirementAsync | 359.4 ns | 6.79 ns | 13.25 ns | 144 b |