InfoGrab DocsInfoGrab Docs

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

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

이 문서는 GranularScopeAuthorization 이 GraphQL 타입, 필드, 뮤테이션에서 세분화된 개인 액세스 토큰(PAT) 권한을 적용하는 방식을 설명합니다. 단계별 구현 가이드는 GraphQL 구현 가이드 를 참조하세요. 개요 # 세분화 토큰 인가 시스템은 타입, 필드, 뮤테이션에 적용된 authorize_granular_token 지시어(directive)를 기반으로 GraphQL에 세밀한 권한 검사를 추가합니다. 이 시스템은 세분화된 PAT가 특정 프로젝트, 그룹, 사용자, 인스턴스 경계 내에서 명시적으로 권한이 부여된 리소스에만 접근할 수 있도록 보장합니다. 기능 플래그 : 이 기능은 토큰의 사용자에 대해 granular_personal_access_tokens 기능 플래그가 활성화되어 있어야 합니다. 플래그가 비활성화된 경우 세분화된 PAT는 GraphQL 요청에 대해 작동하지 않습니다. 아키텍처 구성 요소 # 1. 인가 확인(Authorization check) # 위치 : lib/gitlab/graphql/authz/granular_scope_authorization.rb 목적 : 타입, 필드, 뮤테이션에 선언된 authorize_granular_token 지시어를 요청의 세분화된 PAT에 대해 평가합니다. 공개 메서드 : ok?(object, context, arguments: nil) : true 또는 false 를 반환합니다. 타입 수준 및 필드 수준 인가에 사용됩니다. authorize!(object, context, arguments: nil) : 인가가 실패하면 거부 메시지와 함께 Gitlab::Graphql::Errors::ArgumentError 를 발생시킵니다. 뮤테이션에 사용됩니다. 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. 경계 추출기(Boundary extractor) # 위치 : lib/gitlab/graphql/authz/boundary_extractor.rb 목적 : 토큰이 스코프로 지정되어야 하는 객체를 해석합니다