다음을 통해 공유


GraphQL 요청 유효성 검사

적용 대상: 모든 API Management 계층

validate-graphql-request 정책은 GraphQL 요청의 유효성을 검사하고 GraphQL API의 특정 쿼리 경로에 대한 액세스 권한을 부여합니다. 잘못된 쿼리는 "요청 오류"입니다. 권한 부여는 유효한 요청에 대해서만 수행됩니다.

참고 항목

정책 문에 제공된 순서대로 정책의 요소 및 자식 요소를 설정합니다. API Management 정책을 설정하거나 편집하는 방법에 대해 자세히 알아봅니다.

정책 문

<validate-graphql-request error-variable-name="variable name" max-size="size in bytes" max-depth="query depth">
    <authorize>
        <rule path="query path, for example: '/listUsers' or '/__*'" action="string or policy expression that evaluates to 'allow | remove | reject | ignore'" />
    </authorize>
</validate-graphql-request>

특성

특성 설명 필수 항목 기본값
error-variable-name 유효성 검사 오류를 로그할 context.Variables의 변수 이름입니다. 정책 식이 허용됩니다. 아니요 해당 없음
max-size 요청 페이로드의 최대 크기(바이트)입니다. 허용되는 최댓값: 102,400바이트(100KB). (이 제한을 늘려야 하는 경우 고객 지원팀에 문의하세요.) 정책 식이 허용됩니다. 해당 없음
max-depth 정수입니다. 최대 쿼리 깊이입니다. 정책 식이 허용됩니다. 아니요 6

Elements

이름 설명 필수
권한 부여 이 요소를 추가하여 하나 이상의 경로에 대해 적절한 권한 부여 규칙을 설정합니다. 아니요
rule 특정 쿼리 경로에 권한을 부여하려면 이러한 요소 중 하나 이상을 추가합니다. 각 규칙은 필요에 따라 다른 작업을 지정할 수 있습니다. 정책 식을 사용하여 조건부로 지정할 수 있습니다. 아니요

규칙 특성

attribute 설명 필수 항목 기본값
경로 권한 부여 유효성 검사를 실행할 경로입니다. /type/field 패턴을 따라야 합니다. 해당 없음
작업 규칙이 적용되는 경우 수행할 작업입니다. 정책 식을 사용하여 조건부로 지정할 수 있습니다. 아니요 허용

검사 시스템

path=/__*에 대한 정책은 검사 시스템입니다. 이를 사용하여 검사 요청(__schema, __type 등)을 거부할 수 있습니다.

작업 요청

사용 가능한 작업은 다음 표에 설명되어 있습니다.

작업 설명
거부 요청 오류가 발생하고 요청이 백 엔드로 보내지지 않습니다. 구성된 경우 추가 규칙이 적용되지 않습니다.
remove 필드 오류가 발생하고 필드가 요청에서 제거됩니다.
허용 필드가 백 엔드에 전달됩니다.
ignore 이 경우 규칙이 유효하지 않으며 다음 규칙이 적용됩니다.

사용

사용법 참고 사항

  • API Management로 가져온 통과 또는 가상 GraphQL API에 대한 정책을 구성합니다.

  • 이 정책은 정책 섹션에서 한 번만 사용할 수 있습니다.

  • GraphQL 쿼리는 평면화된 스키마를 사용하므로 출력 형식의 리프 노드에서 사용 권한을 적용할 수 있습니다.

    • 변형, 쿼리 또는 구독
    • 형식 선언의 개별 필드

    적용되지 않을 수 있는 권한은 다음과 같습니다.

    • 입력 유형
    • 조각
    • Unions
    • 인터페이스
    • 스키마 요소

오류 처리

GraphQL 스키마에 대한 유효성 검사 실패 또는 요청의 크기 또는 깊이에 대한 실패는 요청 오류이며, 오류 블록(그러나 데이터 블록 없음)과 함께 요청이 실패합니다.

Context.LastError 속성과 마찬가지로 모든 GraphQL 유효성 검사 오류는 GraphQLErrors 변수에 자동으로 전파됩니다. 오류를 별도로 전파해야 하는 경우 오류 변수 이름을 지정할 수 있습니다. 오류는 error 변수 및 GraphQLErrors 변수에 푸시됩니다.

예제

쿼리 유효성 검사

다음 예제에서는 다음 유효성 검사 및 권한 부여 규칙을 GraphQL 쿼리에 적용합니다.

  • 100kb보다 크거나 쿼리 깊이가 4보다 큰 요청이 거부됩니다.
  • 검사 시스템에 대한 요청이 거부됩니다.
  • /Missions/name 필드는 두 개가 넘는 헤더가 포함된 요청에서 제거됩니다.
<validate-graphql-request error-variable-name="name" max-size="102400" max-depth="4"> 
    <authorize>
        <rule path="/__*" action="reject" /> 
        <rule path="/Missions/name" action="@(context.Request.Headers.Count > 2 ? "remove" : "allow")" />
    </authorize>
</validate-graphql-request> 

변형 유효성 검사

다음 예제에서는 다음 유효성 검사 및 권한 부여 규칙을 GraphQL 변형에 적용합니다.

  • 100kb보다 크거나 쿼리 깊이가 4보다 큰 요청이 거부됩니다.
  • deleteUser 필드 변형에 대한 요청이 198.51.100.1 IP 주소에서 오는 경우를 제외하고는 해당 요청이 거부됩니다.
<validate-graphql-request error-variable-name="name" max-size="102400" max-depth="4"> 
    <authorize>
        <rule path="/Mutation/deleteUser" action="@(context.Request.IpAddress <> "198.51.100.1" ? "deny" : "allow")" />
    </authorize>
</validate-graphql-request> 

정책 작업에 대한 자세한 내용은 다음을 참조하세요.