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.
Penyusun API Data mengekspos data Anda melalui titik akhir REST dan GraphQL. Mengamankan API Anda memerlukan perhatian ke tiga area inti: autentikasi (siapa yang memanggil?), otorisasi (apa yang dapat mereka lakukan?), dan keamanan transportasi (apakah koneksi dilindungi?).
Tiga pilar keamanan
| Pilar | Pertanyaan yang dijawabnya | Konsep utama |
|---|---|---|
| Authentication | Siapa peneleponnya? | Memvalidasi token dari IdP (Penyedia Identitas) |
| Otorisasi | Apa yang bisa mereka lakukan? | Izin berbasis peran pada entitas |
| Transportasi | Apakah koneksi aman? | Enkripsi Keamanan Lapisan Transportasi (TLS) untuk semua lalu lintas |
Pilih penyedia autentikasi Anda
Pembuat API Data mendukung beberapa penyedia autentikasi. Pilih salah satu yang cocok dengan skenario penyebaran Anda:
| Provider | Skenario penggunaan | Panduan |
|---|---|---|
| Belum diautentikasi | DAB berada di belakang antarmuka tepercaya yang mengelola identitas (default) | Mengonfigurasi penyedia tidak diautentikasi |
ID Microsoft Entra (EntraID/AzureAD) |
Aplikasi produksi menggunakan identitas Microsoft | Mengonfigurasi autentikasi Microsoft Entra |
| Token Web JSON Kustom (JWT) | IdP pihak ketiga (Okta, Auth0, Keycloak) | Mengonfigurasi autentikasi JWT kustom |
| Layanan Aplikasi | Aplikasi yang berjalan di belakang Azure App Service EasyAuth (tajuk platform) | Mengonfigurasi autentikasi pada App Service |
| Simulator | Pengembangan dan pengujian lokal | Konfigurasikan autentikasi Simulator |
| OBO (didelegasikan pengguna) | Database SQL yang memerlukan identitas pengguna nyata (keamanan tingkat baris, audit) | Mengonfigurasi autentikasi OBO |
Nota
Fungsionalitas Pembuat API Data 2.0 yang dijelaskan di bagian ini saat ini dalam pratinjau dan mungkin berubah sebelum ketersediaan umum. Untuk informasi selengkapnya, lihat Apa yang baru dalam versi 2.0.
Authentication
Autentikasi memverifikasi identitas pemanggil. Pembuat API Data mengautentikasi permintaan dengan memvalidasi token pembawa JWT (EntraID/AzureAD, Custom) atau memercayai header identitas yang disediakan platform (AppService, StaticWebApps).
Simulator melewatkan validasi eksternal untuk pengembangan.
Cara kerjanya
- Untuk penyedia JWT, klien memperoleh token dari penyedia identitas
- Klien mengirim token di
Authorization: Bearer <token>header (penyedia JWT) atau platform menyuntikkan header identitas (EasyAuth/SWA) - Pembuat API Data memvalidasi token atau header platform (penerbit, audiens, tanda tangan untuk penyedia JWT)
- DAB mengekstrak peran pengguna dari token atau header identitas
Referensi cepat
| Setting | Deskripsi |
|---|---|
runtime.host.authentication.provider |
Penyedia autentikasi (Unauthenticated, EntraID/AzureAD, Custom, AppService, StaticWebApps, ) Simulator |
runtime.host.authentication.jwt.audience |
Klaim audiens yang diharapkan untuk penyedia JWT (tidak digunakan oleh AppService/StaticWebApps/Simulator/Unauthenticated) |
runtime.host.authentication.jwt.issuer |
Penerbit/otoritas yang diharapkan untuk penyedia JWT (tidak digunakan oleh AppService/StaticWebApps/Simulator/Unauthenticated) |
Untuk konfigurasi khusus penyedia, lihat panduan autentikasi di bagian ini.
Authorization
Otorisasi menentukan apa yang dapat dilakukan pengguna yang diautentikasi (atau anonim). Penyusun API Data menggunakan kontrol akses berbasis peran (RBAC) untuk membatasi akses ke entitas dan tindakan.
Cara kerjanya
- DAB menetapkan peran pada permintaan berdasarkan token dan headersnya
- DAB mencari izin entitas untuk peran tersebut
- Jika peran memiliki izin untuk tindakan yang diminta, DAB menjalankan kueri
- Jika tidak, DAB akan mengembalikan respons
403 Forbidden
Peran sistem vs. peran pengguna
| Jenis peran | Deskripsi |
|---|---|
Anonymous |
Ditetapkan ketika tidak ada identitas terautentikasi yang ada |
Authenticated |
Ditetapkan saat permintaan diautentikasi (header platform yang diterima atau tepercaya JWT) dan tidak ada peran pengguna tertentu yang dipilih |
| Peran pengguna | Peran kustom dari klaim token roles (atau peran platform), dipilih melalui X-MS-API-ROLE header |
Aman secara default
Entitas tidak memiliki izin secara default. Anda harus secara eksplisit memberikan akses:
{
"entities": {
"Book": {
"permissions": [
{ "role": "authenticated", "actions": ["read"] }
]
}
}
}
Untuk konfigurasi terperinci, lihat Gambaran umum otorisasi.
Keamanan tingkat baris dan tingkat bidang
Melampaui izin tingkat entitas dengan pengendalian akses tingkat rinci:
| Feature | Deskripsi | Panduan |
|---|---|---|
| Kebijakan database (keamanan tingkat baris) | Menerjemahkan ekspresi kebijakan ke dalam predikat kueri yang memfilter baris berdasarkan klaim atau konteks sesi | Menerapkan keamanan tingkat baris |
| Keamanan tingkat lapangan | Menyertakan atau mengecualikan kolom tertentu per peran | Akses bidang |
| On-Behalf-Of (OBO) | Menukar token pengguna masuk dengan token SQL hilir sehingga database mengautentikasi sebagai pengguna panggilan aktual (hanya mssql) | Autentikasi yang didelegasikan pengguna |
Pewarisan peran
DAB 2.0 memperkenalkan pewarisan peran untuk hak akses entitas. Rantai warisan adalah named-role → authenticated → anonymous. Jika peran tidak dikonfigurasi secara eksplisit untuk entitas, peran tersebut mewarisi dari peran yang lebih luas berikutnya. Tentukan izin sekali di anonymous dan setiap peran yang lebih luas mendapatkan akses yang sama. Untuk detailnya, lihat Pewarisan peran.
Keamanan transportasi dan konfigurasi
Keamanan transportasi
- Menggunakan TLS untuk semua koneksi: Mengenkripsi lalu lintas antara klien dan DAB
- Nonaktifkan versi TLS warisan: Hanya Mengandalkan TLS 1.2+
- Menggunakan titik akhir HTTPS: Jangan pernah mengekspos DAB melalui HTTP yang tidak terenkripsi dalam produksi
Untuk detailnya, lihat Praktik terbaik keamanan.
Keamanan konfigurasi
-
Menyimpan rahasia dalam variabel lingkungan: Gunakan
@env('SECRET_NAME')dalam konfigurasi Anda -
Menggunakan Azure Key Vault: Mereferensikan rahasia dengan
@azure('key-vault-uri') -
Jangan pernah menerapkan rahasia: Bebaskan
dab-config.jsonkata sandi dan string koneksi
{
"data-source": {
"connection-string": "@env('SQL_CONNECTION_STRING')"
}
}
Pemantauan dan pembaruan
- Memantau akses: Menggunakan Application Insights untuk melacak permintaan dan mendeteksi anomali
- Tinjau log: Periksa upaya autentikasi yang gagal dan penolakan izin
- Menjaga DAB tetap diperbarui: Menerapkan patch keamanan dengan meningkatkan ke versi terbaru
Panduan mulai cepat
| Tugas | Panduan |
|---|---|
| Menggunakan front end tepercaya tanpa validasi JWT di DAB | Mengonfigurasi penyedia tidak diautentikasi |
| Menyiapkan autentikasi ID Microsoft Entra | Mengonfigurasi autentikasi Microsoft Entra |
| Menggunakan Okta atau Auth0 | Mengonfigurasi autentikasi JWT kustom |
| Beroperasi di belakang Azure App Service | Mengonfigurasi autentikasi pada App Service |
| Menguji izin secara lokal | Konfigurasikan autentikasi Simulator |
| Membatasi baris menurut pengguna | Menerapkan keamanan tingkat baris |
| Memahami penetapan peran | Gambaran umum otorisasi |