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.
Rahasia klien adalah nilai string yang digunakan aplikasi Anda untuk membuktikan identitasnya saat meminta token dari platform identitas Microsoft. Microsoft. Identity.Web mendukung rahasia klien sebagai salah satu dari beberapa jenis kredensial untuk aplikasi klien rahasia.
Penting
Rahasia klien hanya boleh digunakan dalam lingkungan pengembangan dan pengujian. Untuk beban kerja produksi, gunakan sertifikat atau kredensial tanpa sertifikat seperti identitas terkelola atau kredensial identitas gabungan. Rahasia klien lebih mudah disusupi daripada kredensial berbasis sertifikat dan tidak dapat dicakup ke operasi tertentu.
Pilih jenis kredensial
Aplikasi klien rahasia memerlukan kredensial untuk mengautentikasi dengan platform identitas Microsoft. Microsoft. Identity.Web mendukung jenis kredensial berikut melalui bagian konfigurasi ClientCredentials:
| Jenis kredensial | Lingkungan yang direkomendasikan | Tingkat keamanan |
|---|---|---|
| Rahasia klien | Pengembangan, pengujian | Kurang Penting |
| Sertifikat | Penyiapan, produksi | Tinggi |
| Identitas yang dikelola | produksi yang dihosting di Azure | Tertinggi |
| Identitas gabungan | CI/CD, Kubernetes | Tinggi |
Rahasia klien adalah string sederhana yang terdaftar di aplikasi Anda di Microsoft Entra ID. Meskipun merupakan jenis kredensial yang paling mudah untuk disiapkan, mereka juga memiliki batasan keamanan yang signifikan:
- Mereka dapat secara tidak sengaja diekspos dalam kode sumber, log, atau file konfigurasi.
- Mereka memiliki tanggal kedaluwarsa dan harus diputar secara manual.
- Mereka tidak memberikan bukti kriptografi atas identitas penelepon selain kepemilikan rahasia.
Mengonfigurasi rahasia klien di appsettings.json
Untuk mengonfigurasi rahasia klien, tambahkan ClientCredentials array ke bagian AzureAd pada file appsettings.json Anda.
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "YOUR_TENANT_ID",
"ClientId": "YOUR_CLIENT_ID",
"ClientCredentials": [
{
"SourceType": "ClientSecret",
"ClientSecret": "YOUR_SECRET_VALUE"
}
]
}
}
Array ClientCredentials mendukung beberapa entri. Microsoft. Identity.Web mencoba setiap kredensial secara berurutan hingga berhasil, yang berguna untuk skenario rotasi rahasia.
Peringatan
Jangan pernah menerapkan nilai rahasia aktual ke kontrol sumber. Placeholder YOUR_SECRET_VALUE dalam contoh sebelumnya harus diganti dengan referensi ke penyimpanan aman, sesuai penjelasan di bagian berikut.
Menyimpan rahasia untuk pengembangan
Bagian ini menjelaskan cara menyimpan nilai rahasia dari kode sumber Anda selama pengembangan lokal.
.NET rahasia pengguna
Pendekatan yang direkomendasikan untuk menyimpan rahasia selama pengembangan lokal adalah alat Secret Manager. Rahasia Pengguna menyimpan data sensitif di luar pohon proyek Anda, yang mencegah penerapan yang tidak disengaja ke kontrol sumber.
Inisialisasi Rahasia Pengguna untuk proyek Anda:
dotnet user-secrets initAtur nilai rahasia klien:
dotnet user-secrets set "AzureAd:ClientCredentials:0:ClientSecret" "your-secret-value"Verifikasi bahwa rahasia telah disimpan:
dotnet user-secrets list
Rahasia Pengguna secara otomatis dimuat di Development lingkungan saat Anda menggunakan WebApplication.CreateBuilder() atau Host.CreateDefaultBuilder().
Anda appsettings.json harus berisi struktur tanpa nilai rahasia aktual:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "YOUR_TENANT_ID",
"ClientId": "YOUR_CLIENT_ID",
"ClientCredentials": [
{
"SourceType": "ClientSecret"
}
]
}
}
Variabel lingkungan
Anda juga dapat menggunakan variabel lingkungan untuk memberikan rahasia klien. konfigurasi .NET secara otomatis memetakan variabel lingkungan yang menggunakan pemisah __ (garis bawah ganda) ke hierarki konfigurasi. Atur variabel untuk shell Anda:
$env:AzureAd__ClientCredentials__0__ClientSecret = "your-secret-value"
Variabel lingkungan lebih diutamakan daripada nilai dalam appsettings.json, sehingga nilai rahasia dalam file konfigurasi Anda dapat kosong atau dihilangkan.
Menyimpan rahasia untuk lingkungan yang lebih tinggi
Untuk penahapan, QA, atau lingkungan bersama apa pun, gunakan Azure Key Vault sebagai sumber konfigurasi. Pendekatan ini menjaga rahasia dari file konfigurasi dan variabel lingkungan sambil menyediakan audit, kebijakan akses, dan kemampuan rotasi otomatis.
Menambahkan Azure Key Vault sebagai sumber konfigurasi
Instal paket NuGet yang diperlukan:
dotnet add package Azure.Extensions.AspNetCore.Configuration.SecretsSimpan secret client di Azure Key Vault dengan nama yang sesuai dengan jalur konfigurasi. Gunakan
--(garis putus ganda) sebagai pemisah:az keyvault secret set \ --vault-name "your-keyvault-name" \ --name "AzureAd--ClientCredentials--0--ClientSecret" \ --value "your-secret-value"Tambahkan Key Vault sebagai sumber konfigurasi di
Program.cs. Kode berikut mendaftarkan Key Vault sehingga rahasianya tersedia melalui API konfigurasi standar:var builder = WebApplication.CreateBuilder(args); builder.Configuration.AddAzureKeyVault( new Uri("https://your-keyvault-name.vault.azure.net/"), new DefaultAzureCredential());
Nama rahasia di Key Vault AzureAd--ClientCredentials--0--ClientSecret dipetakan secara otomatis ke jalur konfigurasi AzureAd:ClientCredentials:0:ClientSecret.
Petunjuk / Saran
Bahkan saat menggunakan Key Vault untuk menyimpan rahasia klien, pertimbangkan apakah beban kerja produksi Anda akan lebih baik dilayani oleh sertifikat atau identitas terkelola. Key Vault berguna untuk lingkungan pengembangan atau penahapan bersama, tetapi aplikasi produksi harus menggunakan jenis kredensial yang lebih kuat.
Membuat rahasia klien di portal Azure
Ikuti langkah-langkah ini untuk mendaftarkan rahasia klien untuk aplikasi Anda di Microsoft Entra ID:
- Masuk ke pusat admin Microsoft Entra.
- Navigasi ke Identity>Aplikasi>Registrasi Aplikasi.
- Pilih aplikasi Anda dari daftar.
- Di menu sebelah kiri, pilih Sertifikat & rahasia.
- Pilih tab Rahasia klien .
- Pilih Rahasia klien baru.
- Di panel Tambahkan rahasia klien :
- Masukkan Deskripsi untuk rahasia (misalnya, "Rahasia pengembangan").
- Pilih durasi Kedaluwarsa . Opsi yang tersedia termasuk 180 hari, 365 hari, 730 hari, atau tanggal kustom.
- Pilih Tambahkan.
- Salin nilai rahasia segera. Nilai hanya ditampilkan sekali dan tidak dapat diambil setelah Anda menavigasi jauh dari halaman.
Penting
Rekam nilai rahasia di lokasi aman segera setelah pembuatan. Microsoft Entra ID hanya menampilkan nilai pada waktu pembuatan. Jika Anda kehilangan nilainya, Anda harus membuat rahasia baru.
Mengelola kedaluwarsa dan rotasi rahasia
Rahasia klien memiliki masa pakai maksimum dan kedaluwarsa pada tanggal yang ditentukan selama pembuatan. Rencanakan rotasi rahasia untuk menghindari pemadaman aplikasi.
Pantau kedaluwarsa
- Periksa kolom Kedaluwarsa di halaman Sertifikat & rahasia pendaftaran aplikasi Anda.
- Siapkan rekomendasi Microsoft Entra untuk menerima pemberitahuan sebelum kredensial kedaluwarsa.
Strategi rotasi
Gunakan array ClientCredentials untuk mendukung rotasi tanpa waktu henti.
Buat rahasia klien baru di portal Azure.
Tambahkan rahasia baru sebagai entri tambahan dalam
ClientCredentialsarray. Tempatkan rahasia baru terlebih dahulu sehingga dicoba sebelum yang lama:{ "AzureAd": { "ClientCredentials": [ { "SourceType": "ClientSecret", "ClientSecret": "[NEW_SECRET_REFERENCE]" }, { "SourceType": "ClientSecret", "ClientSecret": "[OLD_SECRET_REFERENCE]" } ] } }Sebarkan konfigurasi yang diperbarui. Microsoft. Identity.Web mencoba kredensial pertama dan kembali ke yang kedua jika yang pertama gagal.
Setelah mengonfirmasi rahasia baru berfungsi, hapus rahasia lama dari konfigurasi dan portal Azure.
Pindah ke kredensial produksi
Sebelum menyebarkan ke produksi, migrasikan dari rahasia klien ke jenis kredensial yang lebih aman:
Autentikasi berbasis sertifikat
Sertifikat memberikan bukti kriptografi identitas dan merupakan jenis kredensial yang direkomendasikan untuk produksi. Konfigurasi berikut mengambil sertifikat dari Key Vault:
{
"AzureAd": {
"ClientCredentials": [
{
"SourceType": "KeyVault",
"KeyVaultUrl": "https://your-keyvault-name.vault.azure.net",
"KeyVaultCertificateName": "your-certificate-name"
}
]
}
}
Untuk langkah-langkah terperinci, lihat Gunakan sertifikat dengan Microsoft. Identity.Web.
Identitas yang dikelola (bebas sertifikat)
Untuk aplikasi yang dihosting di Azure, identitas terkelola menghilangkan kebutuhan untuk mengelola kredensial sepenuhnya. Konfigurasi berikut menggunakan identitas terkelola yang ditetapkan pengguna:
{
"AzureAd": {
"ClientCredentials": [
{
"SourceType": "SignedAssertionFromManagedIdentity",
"ManagedIdentityClientId": "YOUR_MANAGED_IDENTITY_CLIENT_ID"
}
]
}
}
Untuk langkah-langkah terperinci, silakan lihat autentikasi tanpa sertifikat dengan Microsoft.Identity.Web.
Daftar periksa migrasi
- [ ] Hasilkan atau provisikan kredensial baru (sertifikat atau identitas terkelola).
- [ ] Perbarui konfigurasi aplikasi Anda untuk menggunakan jenis kredensial baru.
- [ ] Uji kredensial baru di lingkungan uji coba.
- [ ] Sebarkan ke lingkungan produksi.
- [ ] Hapus rahasia klien lama dari portal Azure.
- [ ] Verifikasi fungsi aplikasi dengan benar tanpa rahasia lama.
Hindari kesalahan keamanan umum
Tinjau pola buruk berikut dan alternatif yang direkomendasikan saat bekerja dengan rahasia pelanggan:
| Anti-pola praktek | Risiko | Recommendation |
|---|---|---|
| Rahasia hard-coding dalam kode sumber | Rahasia yang diekspos dalam kontrol versi | Menggunakan Rahasia Pengguna, variabel lingkungan, atau Key Vault |
Berkomitmen appsettings.Development.json dengan rahasia |
Rahasia terekspos ke siapa saja yang memiliki akses repositori | Tambahkan file ke .gitignore dan gunakan Rahasia Pengguna sebagai gantinya |
| Berbagi rahasia di seluruh lingkungan | Rahasia pengembang yang disusupi mengekspos lingkungan produksi | Menggunakan rahasia unik per lingkungan |
| Menggunakan rahasia dalam produksi | Risiko pencurian kredensial yang lebih tinggi | Bermigrasi ke sertifikat atau identitas terkelola |
| Membuat rahasia tanpa rencana kedaluwarsa | Gangguan aplikasi ketika kunci kedaluwarsa | Atur pengingat kedaluwarsa dan terapkan rotasi |
| Mencatat nilai rahasia | Rahasia yang diekspos dalam file log | Jangan pernah mencatat nilai kredensial; hanya mencatat jenis sumber kredensial |
| Menyimpan rahasia dalam file teks biasa di server | Rahasia yang diekspos ke siapa saja dengan akses server | Menggunakan variabel lingkungan atau Key Vault |
Memecahkan masalah kesalahan umum
Bagian ini mencakup kesalahan yang sering Anda temui saat mengonfigurasi rahasia klien.
Rahasia klien tidak valid
Kesalahan:AADSTS7000215: Invalid client secret provided.
Kemungkinan penyebabnya:
- Nilai rahasia salah disalin. Nilai rahasia dapat berisi karakter khusus yang dipotong selama operasi salin/tempel.
- Rahasia dibuat untuk pendaftaran aplikasi yang berbeda dari yang dikonfigurasi di
ClientId. - Jalur konfigurasi salah, dan nilai rahasia tidak dibaca oleh aplikasi.
Resolusi:
Buat rahasia klien baru di portal Azure dan salin nilai lengkap dengan hati-hati.
Verifikasi
ClientIddanTenantIddalam konfigurasi Anda sesuai dengan pendaftaran aplikasi di mana kunci rahasia dibuat.Tambahkan titik henti atau pernyataan log untuk memverifikasi konfigurasi dimuat dengan benar:
// For debugging only — remove before committing var config = builder.Configuration.GetSection("AzureAd:ClientCredentials:0:ClientSecret").Value; Console.WriteLine($"Secret loaded: {!string.IsNullOrEmpty(config)}");
Rahasia klien kedaluwarsa
Kesalahan:AADSTS7000222: The provided client secret keys for app '{app-id}' are expired.
Resolusi:
- Navigasi ke pendaftaran aplikasi di pusat admin Microsoft Entra.
- Periksa tanggal kedaluwarsa di bawah Sertifikat & rahasia>Rahasia klien.
- Buat rahasia baru dan perbarui konfigurasi aplikasi Anda.
- Hapus rahasia yang kedaluwarsa dari portal.
Rahasia tidak ditemukan dalam konfigurasi
Gejala: Aplikasi melempar NullReferenceException atau gagal mengautentikasi karena nilai rahasianya adalah null.
Kemungkinan penyebabnya:
- Rahasia Pengguna tidak diinisialisasi untuk proyek.
- Nama variabel lingkungan tidak cocok dengan jalur konfigurasi yang diharapkan.
- Key Vault tidak dikonfigurasi sebagai sumber konfigurasi.
- Aplikasi ini berjalan di lingkungan non-Pengembangan tempat Rahasia Pengguna tidak dimuat.
Resolusi:
- Memastikan Rahasia Pengguna sudah diinisialisasi dengan memeriksa
UserSecretsIddi file.csprojAnda. - Verifikasi rahasia diatur dengan menjalankan
dotnet user-secrets list. - Periksa apakah jalur konfigurasi cocok persis:
AzureAd:ClientCredentials:0:ClientSecret. - Jika berjalan di luar lingkungan Pengembangan, pastikan sumber konfigurasi yang sesuai (variabel lingkungan atau Key Vault) tersedia.
Konten terkait
- Certificates dengan Microsoft.Identity.Web
- Autentikasi tanpa sertifikat
- Gambaran umum tentang cache token
- penyimpanan rahasia aplikasi yang aman dalam pengembangan di ASP.NET Core
- Penyedia konfigurasi untuk Azure Key Vault dalam ASP.NET Core