Validasi permintaan GraphQL
BERLAKU UNTUK: Semua tingkatAN API Management
Kebijakan validate-graphql-request
memvalidasi permintaan GraphQL dan mengotorisasi akses ke jalur kueri tertentu di API GraphQL. Kueri yang tidak valid adalah "kesalahan permintaan". Otorisasi hanya dilakukan untuk permintaan yang valid.
Catatan
Tetapkan elemen kebijakan dan elemen turunan dalam urutan yang disediakan dalam pernyataan kebijakan. Pelajari lebih lanjut cara mengatur atau mengedit kebijakan API Management.
Pernyataan kebijakan
<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>
Atribut
Atribut | Deskripsi | Wajib diisi | Default |
---|---|---|---|
error-variable-name | Nama variabel di context.Variables untuk mencatat kesalahan validasi. Ekspresi kebijakan diizinkan. |
No | T/A |
max-size | Ukuran maksimum payload permintaan dalam byte. Nilai maksimum yang diperbolehkan: 102.400 byte (100 KB). (Hubungi dukungan jika Anda perlu meningkatkan batas ini.) Ekspresi kebijakan diizinkan. | Ya | T/A |
kedalaman maks | Bilangan bulat. Kedalaman kueri maksimum. Ekspresi kebijakan diizinkan. | No | 6 |
Elemen
Nama | Deskripsi | Wajib diisi |
---|---|---|
Otorisasi | Tambahkan elemen ini untuk mengatur aturan otorisasi yang sesuai untuk satu atau beberapa jalur. | No |
rule | Tambahkan satu atau beberapa elemen ini untuk mengotorisasi jalur kueri tertentu. Setiap aturan dapat secara opsional menentukan tindakan yang berbeda. Dapat ditentukan secara kondisional dengan menggunakan ekspresi kebijakan. | No |
atribut aturan
Atribut | Deskripsi | Wajib diisi | Default |
---|---|---|---|
jalan | Jalur kueri untuk menjalankan validasi otorisasi. Jalur ini harus mengikuti pola: /type/field . |
Ya | T/A |
tindakan | Tindakan yang harus dilakukan jika aturan berlaku. Dapat ditentukan secara kondisional dengan menggunakan ekspresi kebijakan. | No | izinkan |
Sistem introspeksi
Kebijakan untuk path=/__*
adalah sistem introspeksi. Anda dapat menggunakannya untuk menolak permintaan introspeksi (__schema
, __type
, dll.).
Meminta tindakan
Tindakan yang tersedia dijelaskan dalam tabel berikut.
Tindakan | Deskripsi |
---|---|
menolak | Terjadi kesalahan permintaan, dan permintaan tidak dikirim ke backend. Jika dikonfigurasi, aturan tambahan tidak akan diterapkan. |
buka | Kesalahan bidang terjadi, dan bidang dihapus dari permintaan. |
izinkan | Bidang diteruskan ke backend. |
abaikan | Aturan tidak valid untuk kasus ini dan yang akan diterapkan adalah aturan berikutnya. |
Penggunaan
- Bagian kebijakan: masuk
- Cakupan kebijakan: global, ruang kerja, produk, API
- Gateway: klasik, v2, konsumsi, dihost sendiri, ruang kerja
Catatan penggunaan
Konfigurasikan kebijakan untuk API GraphQL pass-through atau sintetis yang telah diimpor ke API Management.
Kebijakan ini hanya dapat digunakan sekali di bagian kebijakan.
Karena kueri GraphQL menggunakan skema yang diratakan, izin dapat diterapkan pada node daun apa pun dari jenis output:
- Mutasi, kueri, atau langganan
- Bidang individual dalam deklarasi jenis
Izin tidak dapat diterapkan ke:
- Jenis input
- Fragmen
- Union
- Antarmuka
- Elemen skema
Penanganan kesalahan
Kegagalan untuk memvalidasi terhadap skema GraphQL, atau kegagalan untuk ukuran atau kedalaman permintaan, adalah kesalahan permintaan dan mengakibatkan permintaan gagal dengan blok kesalahan (tetapi tidak ada blok data).
Mirip dengan properti Context.LastError
, semua kesalahan validasi GraphQL secara otomatis disebarkan dalam variabel GraphQLErrors
. Jika kesalahan perlu disebarkan secara terpisah, Anda dapat menentukan nama variabel kesalahan. Kesalahan didorong ke variabel error
dan variabel GraphQLErrors
.
Contoh
Validasi kueri
Contoh ini menerapkan aturan validasi dan otorisasi berikut ke kueri GraphQL:
- Permintaan yang berukuran lebih besar dari 100 kb atau dengan kedalaman kueri yang lebih besar dari 4 akan ditolak.
- Permintaan ke sistem introspeksi akan ditolak.
- Bidang
/Missions/name
dihapus dari permintaan yang berisi lebih dari dua header.
<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>
Validasi mutasi
Contoh ini menerapkan aturan validasi dan otorisasi berikut ke mutasi GraphQL:
- Permintaan yang berukuran lebih besar dari 100 kb atau dengan kedalaman kueri yang lebih besar dari 4 akan ditolak.
- Permintaan untuk memutasi bidang
deleteUser
akan ditolak kecuali jika permintaan tersebut berasal dari alamat IP198.51.100.1
.
<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>
Kebijakan terkait
Konten terkait
Untuk informasi selengkapnya tentang bekerja dengan kebijakan, lihat:
- Tutorial: Mengubah dan melindungi API Anda
- Referensi Kebijakan untuk daftar lengkap pernyataan kebijakan dan pengaturannya
- Ekspresi kebijakan
- Mengatur atau mengedit kebijakan
- Menggunakan kembali konfigurasi kebijakan
- Repositori cuplikan kebijakan
- Kebijakan penulis menggunakan Microsoft Copilot di Azure