Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
APLIKASI KE: Semua tingkatan API Management
Kebijakan validate-graphql-request memvalidasi permintaan GraphQL dan mengotorisasi access ke jalur kueri tertentu dalam 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 selengkapnya tentang 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 | Bawaan |
|---|---|---|---|
| error-variable-name | Nama variabel di context.Variables untuk mencatat kesalahan validasi. Ekspresi kebijakan diizinkan. |
Tidak. | T/A |
| ukuran maks | Ukuran maksimum payload permintaan dalam byte. Nilai maksimum yang diperbolehkan: 102.400 byte (100 KB). (Hubungi support jika Anda perlu meningkatkan batas ini.) Ekspresi kebijakan diizinkan. | Ya | T/A |
| kedalaman maks | Bilangan bulat. Kedalaman kueri maksimum. Ekspresi kebijakan diizinkan. | Tidak. | 6 |
Elemen
| Nama | Deskripsi | Wajib diisi |
|---|---|---|
| Otorisasi | Tambahkan elemen ini untuk mengatur aturan otorisasi yang sesuai untuk satu atau beberapa jalur. | Tidak. |
| aturan | 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. Untuk setiap bidang daun GraphQL, API Management mengevaluasi semua aturan yang cocok dan menerapkan kecocokan jalur yang paling spesifik (misalnya, /Query/listUsers mengambil alih /Query/*). |
Tidak. |
atribut aturan
| Atribut | Deskripsi | Wajib diisi | Bawaan |
|---|---|---|---|
| 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. | Tidak. | 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. |
| hapus | 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 pass-through atau synthetic GraphQL API 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
Kebijakan ini dapat memvalidasi permintaan GraphQL dengan hingga 250 bidang kueri di semua tingkatan.
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/namedihapus 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
deleteUserakan 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
- Policy repositori
- repo Policy playground
- toolkit kebijakan Azure API Management
- Dapatkan bantuan Copilot untuk membuat, menjelaskan, dan memecahkan masalah kebijakan