Autentikasi dan otorisasi di Azure App Service dan Azure Functions
Catatan
Mulai 1 Juni 2024, semua aplikasi App Service yang baru dibuat akan memiliki opsi untuk menghasilkan nama host default yang unik menggunakan konvensi <app-name>-<random-hash>.<region>.azurewebsites.net
penamaan . Nama aplikasi yang ada akan tetap tidak berubah.
Contoh: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
Untuk detail lebih lanjut, lihat Nama Host Default Unik untuk Sumber Daya App Service.
Azure App Service menyediakan kemampuan autentikasi dan otorisasi bawaan (terkadang disebut sebagai "Auth Mudah"), sehingga Anda dapat masuk ke pengguna dan mengakses data dengan menulis minimal atau tanpa kode di aplikasi web Anda, API RESTful, serta seluler ujung belakang, dan juga Azure Functions. Artikel ini menjelaskan bagaimana Azure App Service membantu menyederhanakan autentikasi dan otorisasi untuk aplikasi Anda.
Mengapa menggunakan autentikasi bawaan?
Anda tidak diharuskan menggunakan fitur ini untuk autentikasi dan otorisasi. Anda dapat menggunakan fitur keamanan yang dipaket dalam kerangka kerja web pilihan Anda, atau Anda dapat menulis utilitas Anda sendiri. Namun, Anda harus memastikan bahwa solusi Anda tetap terbaru dengan pembaruan keamanan, protokol, dan browser terbaru.
Menerapkan solusi aman untuk autentikasi (pengguna masuk) dan otorisasi (menyediakan akses ke data aman) dapat mendapatkan upaya signifikan. Anda harus memastikan untuk mengikuti praktik dan standar terbaik industri, dan menjaga implementasi Anda tetap terbarui. Fitur autentikasi bawaan untuk App Service dan Azure Functions dapat menghemat waktu dan upaya Anda dengan menyediakan autentikasi siap pakai dengan penyedia identitas federasi, memungkinkan Anda untuk fokus pada sisa aplikasi Anda.
- Azure App Service memungkinkan Anda mengintegrasikan berbagai kemampuan autentikasi ke dalam aplikasi web atau API tanpa menerapkannya sendiri.
- Ini dibangun langsung ke dalam platform dan tidak memerlukan bahasa tertentu, SDK, keahlian keamanan, atau bahkan kode apa pun untuk digunakan.
- Anda dapat berintegrasi dengan beberapa penyedia masuk. Misalnya, Microsoft Entra, Facebook, Google, X.
Aplikasi Anda mungkin perlu mendukung skenario yang lebih kompleks seperti integrasi Visual Studio atau persetujuan inkremental. Ada beberapa solusi autentikasi berbeda yang tersedia untuk mendukung skenario ini. Untuk mempelajari lebih lanjut, baca Skenario identitas.
IdP
App Service menggunakan identitas federasi, dimana IdP pihak ketiga mengelola identitas pengguna dan alur autentikasi untuk Anda. IdP berikut ini tersedia secara default:
Penyedia | Titik akhir masuk | Panduan cara kerja |
---|---|---|
Microsoft Entra | /.auth/login/aad |
Login platform Microsoft Entra App Service |
/.auth/login/facebook |
Masuk Facebook App Service | |
/.auth/login/google |
Masuk Google App Service | |
X | /.auth/login/x |
Login App Service X |
GitHub | /.auth/login/github |
Masuk GitHub App Service |
Masuk dengan Apple | /.auth/login/apple |
Masuk App Service Dengan masuk Apple (Pratinjau) |
Semua penyedia OpenID Connect | /.auth/login/<providerName> |
Masuk OpenID Connect App Service |
Saat Anda mengonfigurasi fitur ini dengan salah satu penyedia ini, titik akhir masuknya tersedia untuk autentikasi pengguna dan untuk validasi token autentikasi dari penyedia. Anda dapat memberi pengguna Anda sejumlah opsi masuk ini.
Pertimbangan untuk menggunakan autentikasi bawaan
Mengaktifkan fitur ini akan menyebabkan semua permintaan ke aplikasi Anda dialihkan secara otomatis ke HTTPS, terlepas dari pengaturan konfigurasi Azure App Service untuk menerapkan HTTPS. Anda dapat menonaktifkan ini dengan pengaturan requireHttps
di konfigurasi V2. Namun, kami merekomendasikan untuk tetap menggunakan HTTPS, dan Anda harus memastikan tidak ada token keamanan yang pernah ditransmisikan melalui koneksi HTTP yang tidak aman.
App Service dapat digunakan untuk autentikasi dengan atau tanpa membatasi akses ke konten dan API situs Anda. Pembatasan akses dapat diatur di bagian Pengaturan Autentikasi Autentikasi>aplikasi web Anda. Untuk membatasi akses aplikasi hanya untuk pengguna yang diautentikasi, atur Tindakan yang harus diambil saat permintaan tidak diautentikasi untuk masuk dengan salah satu IdP yang dikonfigurasi. Untuk mengautentikasi tetapi tidak membatasi akses, atur Tindakan yang harus diambil ketika permintaan tidak diautentikasi ke "Izinkan permintaan anonim (tanpa tindakan)."
Penting
Anda harus memberikan setiap pendaftaran aplikasi izin dan persetujuannya sendiri. Hindari berbagi izin antar lingkungan dengan menggunakan pendaftaran aplikasi terpisah untuk slot penyebaran terpisah. Saat menguji kode baru, praktik ini dapat membantu mencegah masalah memengaruhi aplikasi produksi.
Cara kerjanya
Arsitektur fitur
Komponen middleware autentikasi dan otorisasi adalah fitur dari platform yang berjalan pada VM yang sama dengan aplikasi Anda. Ketika diaktifkan, setiap permintaan HTTP masuk melewatinya sebelum ditangani oleh aplikasi Anda.
Platform middleware menangani beberapa hal untuk aplikasi Anda:
- Mengautentikasi pengguna dan klien dengan penyedia identitas yang ditentukan
- Memvalidasi, menyimpan, dan menyegarkan token OAuth yang dikeluarkan oleh penyedia identitas yang dikonfigurasi
- Mengelola sesi terautentikasi
- Masukkan informasi identitas ke header permintaan HTTP
Modul ini berjalan secara terpisah dari kode aplikasi Anda dan dapat dikonfigurasi menggunakan pengaturan Azure Resource Manager atau menggunakan file konfigurasi. Tidak diperlukan SDK, bahasa pemrograman tertentu, atau perubahan pada kode aplikasi Anda.
Fitur arsitektur pada Windows (penyebaran non-kontainer)
Modul autentikasi dan otorisasi berjalan sebagai modul IIS dalam kotak pasir yang sama dengan kode aplikasi Anda. Ketika diaktifkan, setiap permintaan HTTP masuk melewatinya sebelum ditangani oleh aplikasi Anda.
Fitur arsitektur di Linux dan kontainer
Modul autentikasi dan otorisasi berjalan dalam kontainer terpisah, terisolasi dari kode aplikasi Anda. Menggunakan apa yang dikenal sebagai pola Duta besar , ia berinteraksi dengan lalu lintas masuk untuk melakukan fungsi serupa seperti pada Windows. Karena tidak berjalan dalam proses, tidak ada integrasi langsung dengan kerangka bahasa tertentu yang dimungkinkan; namun, informasi relevan yang dibutuhkan aplikasi Anda diteruskan menggunakan header permintaan seperti yang dijelaskan di bawah ini.
Alur autentikasi
Alur autentikasi sama untuk semua penyedia, tetapi berbeda tergantung pada apakah Anda ingin masuk dengan SDK penyedia:
- Tanpa SDK penyedia: Aplikasi mendelegasikan masuk gabungan ke App Service. Ini biasanya terjadi pada aplikasi browser, yang dapat menyajikan halaman masuk penyedia kepada pengguna. Kode server mengelola proses masuk, sehingga juga disebut aliran yang diarahkan server atau aliran server. Kasus ini berlaku untuk aplikasi browser dan aplikasi seluler yang menggunakan browser yang disematkan untuk autentikasi.
- Dengan SDK penyedia: Aplikasi memasukkan pengguna ke penyedia secara manual dan kemudian mengirimkan token autentikasi ke App Service untuk validasi. Ini biasanya terjadi pada aplikasi tanpa browser, yang tidak dapat menyajikan halaman masuk penyedia kepada pengguna. Kode aplikasi mengelola proses masuk, sehingga juga disebut aliran yang diarahkan klien atau aliran klien. Kasus ini berlaku untuk REST API, Azure Functions, dan browser JavaScript klien, serta aplikasi browser yang membutuhkan lebih banyak fleksibilitas dalam proses masuk. Ini juga berlaku untuk aplikasi seluler asli yang menandatangani pengguna dalam menggunakan penyedia SDK.
Panggilan dari aplikasi browser tepercaya di App Service ke REST API lain di App Service atau Azure Functions dapat diautentikasi menggunakan alur yang diarahkan server. Untuk informasi selengkapnya, lihat Mengkustomisasi masuk dan keluar.
Tabel di bawah ini memperlihatkan langkah-langkah alur autentikasi.
Langkah | Tanpa penyedia SDK | Dengan penyedia SDK |
---|---|---|
1. Masuk pengguna | Mengalihkan klien ke /.auth/login/<provider> . |
Kode klien masuk pengguna langsung dengan SDK penyedia dan menerima token autentikasi. Untuk informasi, lihat dokumentasi penyedia. |
2. Pasca-autentikasi | Penyedia mengalihkan klien ke /.auth/login/<provider>/callback . |
Klien kode kirim token dari penyedia ke /.auth/login/<provider> untuk validasi. |
3. Membuat sesi terautentikasi | App Service menambahkan cookie terautentikasi ke respons. | App Service mengembalikan token autentikasinya sendiri ke kode klien. |
4. Menyajikan konten yang diautentikasi | Klien menyertakan cookie autentikasi dalam permintaan berikutnya (ditangani secara otomatis oleh browser). | Kode klien menyajikan token autentikasi di header X-ZUMO-AUTH . |
Untuk browser klien, App Service dapat secara otomatis mengarahkan semua pengguna yang tidak diautentikasi ke /.auth/login/<provider>
. Anda juga dapat menyajikan pengguna dengan satu atau beberapa /.auth/login/<provider>
tautan untuk masuk ke aplikasi Anda menggunakan penyedia pilihan mereka.
Perilaku otorisasi
Penting
Secara default, fitur ini hanya menyediakan autentikasi, bukan otorisasi. Aplikasi Anda mungkin masih perlu membuat keputusan otorisasi, selain pemeriksaan apa pun yang Anda konfigurasi di sini.
Di portal Microsoft Azure, Anda dapat mengonfigurasi App Service dengan sejumlah perilaku saat permintaan masuk tidak diautentikasi. Judul berikut ini menjelaskan opsi.
Membatasi akses
Izinkan permintaan yang tidak diaauthenticated Opsi ini menuangkan otorisasi lalu lintas yang tidak diaauthenticated ke kode aplikasi Anda. Untuk permintaan terautentikasi, App Service juga meneruskan informasi autentikasi di header HTTP.
Opsi ini memberikan lebih banyak fleksibilitas dalam menangani permintaan anonim. Misalnya, ini memungkinkan Anda menyajikan beberapa penyedia masuk kepada pengguna Anda. Namun, Anda harus menulis kode.
Memerlukan autentikasi Opsi ini akan menolak lalu lintas yang tidak diautentikasi ke aplikasi Anda. Tindakan khusus yang harus diambil ditentukan di bagian Permintaan yang tidak diautentikasi.
Dengan opsi ini, Anda tidak perlu menulis kode autentikasi apa pun di aplikasi Anda. Otorisasi yang lebih baik, seperti otorisasi khusus peran, dapat ditangani dengan memeriksa klaim pengguna (lihat Akses klaim pengguna).
Perhatian
Membatasi akses dengan cara ini berlaku untuk semua panggilan ke aplikasi Anda, yang mungkin tidak diinginkan untuk aplikasi yang menginginkan halaman beranda yang tersedia untuk umum, seperti dalam banyak aplikasi satu halaman.
Catatan
Saat menggunakan Penyedia Identitas Microsoft untuk pengguna di organisasi Anda, perilaku defaultnya adalah setiap pengguna di penyewa Microsoft Entra Anda dapat meminta token untuk aplikasi Anda. Anda dapat mengonfigurasi aplikasi di Microsoft Entra jika Anda ingin membatasi akses ke aplikasi Anda ke sekumpulan pengguna yang ditentukan. App Service juga menawarkan beberapa pemeriksaan otorisasi bawaan dasar yang dapat membantu beberapa validasi. Untuk mempelajari selengkapnya tentang otorisasi di Microsoft Entra, lihat Dasar-dasar otorisasi Microsoft Entra.
Permintaan yang tidak diaauthenticated
- Pengalihan HTTP 302 Ditemukan: direkomendasikan untuk tindakan Pengalihan situs web ke salah satu penyedia identitas yang dikonfigurasi. Dalam kasus ini, klien browser dialihkan ke
/.auth/login/<provider>
penyedia yang Anda pilih. - HTTP 401 Tidak Sah: direkomendasikan untuk API Jika permintaan anonim berasal dari aplikasi seluler asli, respons yang
HTTP 401 Unauthorized
dikembalikan adalah . Anda juga dapat mengonfigurasi penolakan menjadiHTTP 401 Unauthorized
untuk semua permintaan. - HTTP 403 Terlarang Mengonfigurasi penolakan menjadi
HTTP 403 Forbidden
untuk semua permintaan. - HTTP 404 Tidak ditemukan Mengonfigurasi penolakan menjadi
HTTP 404 Not found
untuk semua permintaan.
Penyimpanan token
App Service menyediakan penyimpanan token bawaan, yang merupakan repositori token yang terkait dengan pengguna aplikasi web, API Anda, atau aplikasi seluler asli. Saat Anda mengaktifkan autentikasi dengan penyedia apa pun, Penyimpanan token ini segera tersedia untuk aplikasi Anda. Jika kode aplikasi Anda perlu mengakses data dari penyedia ini atas nama pengguna, seperti:
- kirimkan ke linimasa Facebook pengguna yang diautentikasi
- baca data perusahaan pengguna menggunakan Microsoft Graph API
Anda biasanya harus menulis kode untuk mengumpulkan, menyimpan, dan menyegarkan token ini di aplikasi Anda. Dengan penyimpanan token, Anda cukup mengambil token ketika Anda membutuhkannya dan memberi tahu App Service untuk menyegarkannya ketika mereka menjadi tidak valid.
Token ID, token akses, dan token refresh di-cache untuk sesi yang diautentikasi, dan hanya dapat diakses oleh pengguna terkait.
Jika tidak perlu bekerja dengan token di aplikasi Anda, Anda dapat menonaktifkan peyimpanan token di halamanAutentikasi / Otorisasi aplikasi Anda.
Pencatatan dan pelacakan
Jika Anda mengaktifkan pencatatan aplikasi, Anda akan melihat pelacakan autentikasi dan otorisasi langsung di file log Anda. Jika Anda melihat kesalahan autentikasi yang tidak Anda harapkan, Anda dapat dengan mudah menemukan semua detail dengan melihat log aplikasi yang ada. Jika Anda mengaktifkan pelacakan permintaan yang gagal, Anda dapat melihat dengan tepat peran apa yang mungkin dimainkan modul autentikasi dan otorisasi dalam permintaan yang gagal. Dalam catatan jejak, cari referensi ke modul bernama EasyAuthModule_32/64
.
Mitigasi pemalsuan permintaan lintas situs
Autentikasi App Service mengurangi CSRF dengan memeriksa permintaan klien untuk kondisi berikut:
- Ini adalah permintaan POST yang diautentikasi menggunakan cookie sesi.
- Permintaan berasal dari browser yang diketahui (seperti yang ditentukan oleh header HTTP
User-Agent
). - Header HTTP
Origin
atau HTTPReferer
hilang atau tidak ada dalam daftar domain eksternal yang disetujui yang dikonfigurasi untuk pengalihan. - Header HTTP
Origin
hilang atau tidak ada dalam daftar asal CORS yang dikonfigurasi.
Ketika permintaan memenuhi semua kondisi ini, autentikasi App Service secara otomatis menolaknya. Anda dapat mengatasi logika mitigasi ini dengan menambahkan domain eksternal Anda ke daftar pengalihan ke pengaturan>autentikasi Edit Autentikasi>URL Pengalihan eksternal yang diizinkan.
Pertimbangan saat menggunakan Azure Front Door
Saat menggunakan Azure App Service dengan autentikasi di belakang Azure Front Door atau proksi terbalik lainnya, beberapa hal tambahan harus dipertimbangkan.
Nonaktifkan penembolokan untuk alur kerja autentikasi.
Lihat Menonaktifkan cache untuk alur kerja autentikasi untuk mempelajari selengkapnya tentang cara mengonfigurasi aturan di Azure Front Door untuk menonaktifkan penembolokan untuk halaman terkait autentikasi dan otorisasi.
Gunakan titik akhir Front Door untuk pengalihan.
App Service biasanya tidak dapat diakses secara langsung saat diekspos melalui Azure Front Door. Ini dapat dicegah, misalnya, dengan mengekspos App Service melalui Private Link di Azure Front Door Premium. Untuk mencegah alur kerja autentikasi mengalihkan lalu lintas kembali ke App Service secara langsung, penting untuk mengonfigurasi aplikasi untuk mengalihkan kembali ke
https://<front-door-endpoint>/.auth/login/<provider>/callback
.Pastikan App Service menggunakan URI pengalihan yang tepat
Dalam beberapa konfigurasi, App Service menggunakan App Service FQDN sebagai URI pengalihan, bukan Front Door FQDN. Ini akan menyebabkan masalah ketika klien dialihkan ke App Service alih-alih Front Door. Untuk mengubahnya,
forwardProxy
pengaturan perlu diatur ke untukStandard
membuat App Service menghormati header yangX-Forwarded-Host
diatur oleh Azure Front Door.Proksi terbalik lainnya seperti Azure Application Gateway atau produk pihak ketiga mungkin menggunakan header yang berbeda dan memerlukan pengaturan forwardProxy yang berbeda.
Konfigurasi ini tidak dapat dilakukan melalui portal Azure hari ini dan perlu dilakukan melalui
az rest
:Mengekspor pengaturan
az rest --uri /subscriptions/REPLACE-ME-SUBSCRIPTIONID/resourceGroups/REPLACE-ME-RESOURCEGROUP/providers/Microsoft.Web/sites/REPLACE-ME-APPNAME/config/authsettingsV2?api-version=2020-09-01 --method get > auth.json
Memperbarui pengaturan
Cari
"httpSettings": { "forwardProxy": { "convention": "Standard" } }
dan pastikan diatur
convention
keStandard
untuk menghormati header yangX-Forwarded-Host
digunakan oleh Azure Front Door.Pengaturan impor
az rest --uri /subscriptions/REPLACE-ME-SUBSCRIPTIONID/resourceGroups/REPLACE-ME-RESOURCEGROUP/providers/Microsoft.Web/sites/REPLACE-ME-APPNAME/config/authsettingsV2?api-version=2020-09-01 --method put --body @auth.json
Sumber daya lainnya
- Cara: Mengonfigurasi App Service atau aplikasi Azure Functions Anda untuk menggunakan login Microsoft Entra
- Mengkustomisasi masuk dan keluar
Sampel:
- Tutorial: Menambahkan autentikasi ke aplikasi web Anda yang berjalan di Azure App Service
- Tutorial: Mengautentikasi dan mengotorisasi pengguna secara end-to-end di Azure App Service (Windows atau Linux)
- Integrasi .NET Core dari Azure AppService EasyAuth (pihak ke-3)
- Mendapatkan autentikasi Azure App Service bekerja dengan .NET Core (pihak ke-3)