InfoGrab DocsInfoGrab Docs

GraphQL 세분화 토큰 인가 아키텍처

GranularTokenAuthorization 필드 확장이 GraphQL 쿼리 및 뮤테이션에서 세분화된 개인 액세스 토큰(PAT) 권한을 적용하는 방식을 설명합니다.

이 문서는 GranularTokenAuthorization 필드 확장이 GraphQL 쿼리 및 뮤테이션에서 세분화된 개인 액세스 토큰(PAT) 권한을 적용하는 방식을 설명합니다. 단계별 구현 가이드는 GraphQL 구현 가이드 를 참조하세요. 개요 # 세분화 토큰 인가 시스템은 타입, 필드, 뮤테이션에 적용된 지시어(directive)를 기반으로 GraphQL 필드에 세밀한 권한 검사를 추가합니다. 이 시스템은 세분화된 PAT가 특정 프로젝트 또는 그룹 경계 내에서 명시적으로 권한이 부여된 리소스에만 접근할 수 있도록 보장합니다. 기능 플래그 : 이 기능은 토큰의 사용자에 대해 granular_personal_access_tokens 기능 플래그가 활성화되어 있어야 합니다. 플래그가 비활성화된 경우 세분화된 PAT는 GraphQL 요청에 대해 작동하지 않습니다. 아키텍처 구성 요소 # 1. 필드 확장(Field Extension) # 위치 : lib/gitlab/graphql/authz/granular_token_authorization.rb 목적 : 필드 해석(resolution)을 가로채어 인가 검사를 수행합니다. 적용 대상 : Types::BaseField 를 통해 모든 GraphQL 필드에 적용됩니다. 2. 지시어(Directive) # 위치 : app/graphql/directives/authz/granular_scope.rb 목적 : 필요한 권한 및 경계 추출 전략을 선언합니다. 인수(Arguments) : permissions : 필요한 권한 문자열의 배열입니다 (예: ['read_issue'] ). boundary : 해석된 객체에서 경계를 추출하는 메서드 이름입니다. boundary_argument : 경계를 포함하는 인수 이름입니다. boundary_type : 인가 경계의 타입입니다 ( project , group , user , instance ). 권한 경계의 유효성 검사 및 문서화에 사용됩니다. traversal : true 인 경우, 지시어는 토큰이 경계로 스코프가 지정되어 있는지만 확인합니다( read_boundary ). 나열된 권한은 필드 자체에서 적용되지 않습니다. 다운스트림 필드가 실제 권한을 적용하는 Query.group(fullPath:) 와 같은 진입점 필드에 사용합니다. 3. 지시어 파인더(Directive Finder) # 위치 : lib/gitlab/graphql/authz/directive_finder.rb 목적 : 우선순위 순서(field, implementing type, return type, owner type)로 적용 가능한 지시어를 찾습니다. 포함 : GraphQL 타입 래퍼를 언래핑하기 위한 TypeUnwrapper 모듈 4. 경계 추출기(Boundary Extractor) # 위치 : lib/gitlab/graphql/authz/boundary_extractor.rb 목적 : 다양한 소스에서 인가 경계를 추출합니다. 5. 타입 언래퍼(Type Unwrapper) # 위치 :