GraphQL isteğini doğrulama

UYGULANANLAR: Tüm API Management katmanları

İlke, validate-graphql-request GraphQL isteğini doğrular ve Bir GraphQL API'sindeki belirli sorgu yollarına erişimi yetkilendirir. Geçersiz bir sorgu "istek hatası"dır. Yetkilendirme yalnızca geçerli istekler için yapılır.

Not

İlkenin öğelerini ve alt öğelerini ilke bildiriminde sağlanan sırayla ayarlayın. API Management ilkelerini ayarlama veya düzenleme hakkında daha fazla bilgi edinin.

İlke bildirimi

<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>

Özellikler

Öznitelik Açıklama Zorunlu Varsayılan
error-variable-name Doğrulama hatalarını günlüğe kaydetmek için içindeki context.Variables değişkenin adı. İlke ifadelerine izin verilir. Hayır YOK
en büyük boyut İstek yükünün bayt cinsinden en büyük boyutu. İzin verilen en yüksek değer: 102.400 bayt (100 KB). (Bu sınırı artırmanız gerekiyorsa desteğe başvurun.) İlke ifadelerine izin verilir. Yes Yok
maksimum derinlik Tamsayı. En fazla sorgu derinliği. İlke ifadelerine izin verilir. Hayır 6

Öğeler

Veri Akışı Adı Açıklama Gerekli
Yetkilendir Bir veya daha fazla yol için uygun bir yetkilendirme kuralı ayarlamak için bu öğeyi ekleyin. Hayır
Kural Belirli sorgu yollarını yetkilendirmek için bu öğelerden birini veya daha fazlasını ekleyin. Her kural isteğe bağlı olarak farklı bir eylem belirtebilir. İlke ifadesi kullanılarak koşullu olarak belirtilebilir. Hayır

kural öznitelikleri

Öznitelik Açıklama Zorunlu Varsayılan
yol Yetkilendirme doğrulamasını yürütme yolu. Şu desene uygun olmalıdır: /type/field. Yes Yok
eylem Kural geçerliyse gerçekleştirilecek eylem . İlke ifadesi kullanılarak koşullu olarak belirtilebilir. Hayır Izin

İçe dönük sistem

path=/__* ilkesi, iç gözlem sistemidir. İçe dönük istekleri (__schema, __typevb.) reddetmek için bunu kullanabilirsiniz.

İstek eylemleri

Kullanılabilir eylemler aşağıdaki tabloda açıklanmıştır.

Eylem Açıklama
Reddetmek İstek hatası oluşur ve istek arka uça gönderilmez. Yapılandırıldıysa ek kurallar uygulanmaz.
remove Alan hatası oluşur ve alan istekten kaldırılır.
Izin Alan arka uça geçirilir.
yoksayma Kural bu durum için geçerli değil ve sonraki kural uygulanır.

Kullanım

Kullanım notları

  • API Management'a aktarılmış doğrudan veya yapay GraphQL API'sinin ilkesini yapılandırın.

  • Bu ilke, ilke bölümünde yalnızca bir kez kullanılabilir.

  • GraphQL sorguları düzleştirilmiş bir şema kullandığından, izinler çıkış türünün herhangi bir yaprak düğümüne uygulanabilir:

    • Mutasyon, sorgu veya abonelik
    • Tür bildirimindeki tek tek alan

    İzinler şu değerlere uygulanamayabilir:

    • Giriş türleri
    • Parçalar
    • Birleşimler
    • Arabirimler
    • Şema öğesi

Hata işleme

GraphQL şemasında doğrulanamaması veya isteğin boyutu veya derinliği için bir hata olması bir istek hatasıdır ve istek hata bloğuyla başarısız olur (ancak veri bloğu yoktur).

özelliğine Context.LastError benzer şekilde, tüm GraphQL doğrulama hataları değişkende GraphQLErrors otomatik olarak yayılır. Hataların ayrı olarak yayılması gerekiyorsa bir hata değişkeni adı belirtebilirsiniz. Hatalar değişkenine error ve değişkenine GraphQLErrors iletilir.

Örnekler

Sorgu doğrulama

Bu örnek bir GraphQL sorgusuna aşağıdaki doğrulama ve yetkilendirme kurallarını uygular:

  • 100 kb'tan büyük veya sorgu derinliği 4'ten büyük olan istekler reddedilir.
  • İç gözlem sistemine yönelik istekler reddedilir.
  • Alan /Missions/name , ikiden fazla üst bilgi içeren isteklerden kaldırılır.
<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> 

Mutasyon doğrulaması

Bu örnek bir GraphQL mutasyonu için aşağıdaki doğrulama ve yetkilendirme kurallarını uygular:

  • 100 kb'tan büyük veya sorgu derinliği 4'ten büyük olan istekler reddedilir.
  • alanın sesini kapatma istekleri, isteğin deleteUser IP adresinden 198.51.100.1olması dışında reddedilir.
<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> 

İlkelerle çalışma hakkında daha fazla bilgi için bkz: