Mengautentikasi aplikasi NET ke layanan Azure selama pengembangan lokal menggunakan perwakilan layanan

Saat membuat aplikasi cloud, pengembang perlu men-debug dan menguji aplikasi di stasiun kerja lokal mereka. Saat aplikasi dijalankan di stasiun kerja pengembang selama pengembangan lokal, aplikasi masih harus mengautentikasi ke setiap layanan Azure yang digunakan oleh aplikasi. Artikel ini membahas cara menyiapkan objek perwakilan layanan aplikasi khusus yang akan digunakan selama pengembangan lokal.

A diagram showing how a .NET app during local development will use the developer's credentials to connect to Azure by obtaining those credentials locally installed development tools.

Perwakilan layanan aplikasi khusus untuk pengembangan lokal memungkinkan Anda untuk mengikuti prinsip hak istimewa paling sedikit selama pengembangan aplikasi. Karena izin dilingkup ke apa saja yang diperlukan untuk aplikasi selama pengembangan, kode aplikasi dicegah untuk mengakses sumber daya Azure secara tidak sengaja yang dimaksudkan untuk digunakan oleh aplikasi yang berbeda. Hal ini juga mencegah bug terjadi ketika aplikasi dipindahkan ke produksi karena aplikasi memiliki hak istimewa berlebihan di lingkungan pengembangan.

Perwakilan layanan aplikasi disiapkan untuk aplikasi saat aplikasi terdaftar di Azure. Saat mendaftarkan aplikasi untuk pengembangan lokal, disarankan untuk:

  • Membuat pendaftaran aplikasi terpisah untuk setiap pengembang yang bekerja di aplikasi. Hal ini akan membuat perwakilan layanan aplikasi terpisah untuk digunakan setiap pengembang selama pengembangan lokal dan menghindari kebutuhan pengembang untuk berbagi mandat untuk satu perwakilan layanan aplikasi.
  • Membuat pendaftaran aplikasi terpisah per aplikasi. Hal ini mencakup izin aplikasi hanya untuk apa yang diperlukan oleh aplikasi.

Selama pengembangan lokal, variabel lingkungan diatur dengan identitas perwakilan layanan aplikasi. Azure SDK for NET membaca variabel lingkungan ini dan menggunakan informasi ini untuk mengautentikasi aplikasi ke sumber daya Azure yang dibutuhkannya.

1 - Mendaftarkan aplikasi di Azure

Objek perwakilan layanan aplikasi dibuat dengan pendaftaran aplikasi di Azure. Anda dapat menggunakan portal Azure atau Azure CLI.

Masuk ke portal Azure dan ikuti langkah-langkah berikut.

Petunjuk Cuplikan layar
Di portal Azure:
  1. Masukkan pendaftaran aplikasi di bilah pencarian di bagian atas portal Azure.
  2. Pilih item berlabel Pendaftaran aplikasi pada judul Layanan pada menu yang muncul di bawah bilah pencarian.
A screenshot showing how to use the top search bar in the Azure portal to find and navigate to the App registrations page.
Pada halaman Pendaftaran aplikasi, pilih + Pendaftaran baru. A screenshot showing the location of the New registration button in the App registrations page.
Pada halaman Daftarkan aplikasi, isi formulir sebagai berikut.
  1. Nama → Masukkan nama untuk pendaftaran aplikasi di Azure. Disarankan nama ini termasuk nama aplikasi, pengguna untuk pendaftaran aplikasi, dan pengidentifikasi seperti 'pengembangan' untuk menunjukkan pendaftaran aplikasi ini untuk digunakan dalam pengembangan lokal.
  2. Jenis akun yang didukungHanya akun dalam direktori organisasi ini.
Pilih Daftar untuk mendaftarkan aplikasi Anda dan membuat perwakilan layanan aplikasi.
A screenshot showing how to fill out the Register an application page by giving the app a name and specifying supported account types as accounts in this organizational directory only.
Pada halaman Pendaftaran aplikasi untuk aplikasi Anda:
  1. ID Aplikasi (klien) → Ini adalah id aplikasi yang akan digunakan aplikasi untuk mengakses Azure selama pengembangan lokal. Salin nilai ini ke lokasi sementara di editor teks karena Anda akan membutuhkannya di langkah mendatang.
  2. Id direktori (penyewa) → Nilai ini juga akan diperlukan oleh aplikasi Anda saat mengautentikasi ke Azure. Salin nilai ini ke lokasi sementara di editor teks. Nilai ini juga akan dibutuhkan di langkah mendatang.
  3. Mandat klien → Anda harus mengatur mandat klien untuk aplikasi sebelum aplikasi Anda dapat mengautentikasi ke Azure dan menggunakan layanan Azure. Pilih Tambahkan sertifikat atau rahasia untuk menambahkan mandat untuk aplikasi Anda.
A screenshot of the App registration page after the app registration has been completed. This screenshot shows the location of the application ID and tenant ID, which will be needed in a future step. It also shows the location of the link to use to add an application secret for the app.
Pada halaman Sertifikat & rahasia, pilih + Rahasia klien baru. A screenshot showing the location of the link to use to create a new client secret on the certificates and secrets page.
Dialog Tambahkan rahasia klien akan muncul dari sisi kanan halaman. Dalam dialog ini:
  1. Deskripsi → Masukkan nilai Saat Ini.
  2. Kedaluwarsa → Pilih nilai 24 bulan.
Pilih Buat untuk menambahkan rahasia.
A screenshot showing the page where a new client secret is added for the application service principal create by the app registration process.
Pada halaman Sertifikat & rahasia , Anda akan ditampilkan nilai rahasia klien.

Salin nilai ini ke lokasi sementara di editor teks karena Anda akan membutuhkannya di langkah mendatang.

PENTING: Ini adalah satu-satunya waktu Anda akan melihat nilai ini. Setelah Anda keluar atau merefresh halaman ini, Anda tidak akan dapat melihat nilai ini lagi. Anda dapat menambahkan rahasia klien tambahan tanpa membatalkan rahasia klien ini, tetapi Anda tidak akan melihat nilai ini lagi.
A screenshot showing the page with the generated client secret.

2 - Membuat kelompok keamanan Azure AD untuk pengembangan lokal

Karena biasanya ada beberapa pengembang yang mengerjakan aplikasi, disarankan untuk membuat grup Azure AD untuk merangkum peran (izin) yang dibutuhkan aplikasi dalam pengembangan lokal daripada menetapkan peran ke objek perwakilan layanan individual. Ini menawarkan keuntungan berikut.

  • Setiap pengembang diyakinkan untuk memiliki peran yang sama yang ditetapkan karena peran ditetapkan di tingkat grup.
  • Jika peran baru diperlukan untuk aplikasi, peran tersebut hanya perlu ditambahkan ke grup Azure AD untuk aplikasi.
  • Jika pengembang baru bergabung dengan tim, perwakilan layanan aplikasi baru dibuat untuk pengembang dan ditambahkan ke grup, memastikan pengembang memiliki izin yang tepat untuk bekerja di aplikasi.
Petunjuk Cuplikan layar
Navigasi ke halaman Azure Active Directory di portal Microsoft Azure dengan mengetik Azure Active Directory ke dalam kotak pencarian di bagian atas halaman lalu pilih Azure Active Directory dari bawah layanan. A screenshot showing how to use the top search bar in the Azure portal to search for and navigate to the Azure Active Directory page.
Pada halaman Azure Active Directory, pilih Grup dari menu sebelah kiri. A screenshot showing the location of the Groups menu item in the left-hand menu of the Azure Active Directory Default Directory page.
Pada halaman Semua grup, pilih Grup baru. A screenshot showing the location of the New Group button in the All groups page.
Pada halaman Grup Baru:
  1. Jenis grupKeaman
  2. Nama grup → Nama untuk grup keamanan, biasanya dibuat dari nama aplikasi. Akan sangat membantu untuk menyertakan string seperti local-dev dalam nama grup untuk menunjukkan tujuan grup.
  3. Deskripsi grup → Deskripsi tujuan grup.
  4. Pilih link Tidak ada anggota yang dipilih di bawah Anggota untuk menambahkan anggota ke grup.
A screenshot showing how to fill out the form to create a new Azure Active Directory group for the application. This screenshot also shows the location of the link to select to add members to this group.
Pada kotak dialog Tambahkan anggota :
  1. Gunakan kotak pencarian untuk memfilter daftar nama prinsipal dalam daftar.
  2. Pilih perwakilan layanan aplikasi untuk pengembangan lokal untuk aplikasi ini. Saat objek dipilih, objek akan berwarna abu-abu dan berpindah ke daftar Item terpilih di bagian bawah dialog.
  3. Ketika selesai, pilih tombol Pilih.
A screenshot of the Add members dialog box showing how to select application service principals to be included in the group.
Pada halaman Grup baru, pilih Buat untuk membuat grup.

Grup akan dibuat dan Anda akan dibawa kembali ke halaman Semua grup. Mungkin perlu waktu hingga 30 detik agar grup muncul dan Anda mungkin perlu me-refresh halaman karena penembolokan di portal Microsoft Azure.
A screenshot of the New Group page showing how to complete the process by selecting the Create button.

3 - Menetapkan peran ke aplikasi

Selanjutnya, Anda perlu menentukan peran (izin) apa yang dibutuhkan aplikasi Anda pada sumber daya apa dan menetapkan peran tersebut ke aplikasi Anda. Dalam contoh ini, peran akan ditetapkan ke grup Azure Active Directory yang dibuat di langkah 2. Peran dapat diberi peran di sumber daya, grup sumber daya, atau cakupan langganan. Contoh ini akan menunjukkan cara menetapkan peran di cakupan grup sumber daya karena sebagian besar aplikasi mengelompokkan semua sumber daya Azure mereka ke dalam satu grup sumber daya.

Petunjuk Cuplikan layar
Temukan grup sumber daya untuk aplikasi Anda dengan mencari nama grup sumber daya menggunakan kotak pencarian di bagian atas portal Microsoft Azure.

Navigasi ke grup sumber daya Anda dengan memilih nama grup sumber daya di bawah judul Grup Sumber Daya dalam kotak dialog.
A screenshot showing how to use the top search box in the Azure portal to locate and navigate to the resource group you want to assign roles (permissions) to.
Pada halaman untuk grup sumber daya, pilih Kontrol akses (IAM) dari menu sebelah kiri. A screenshot of the resource group page showing the location of the Access control (IAM) menu item.
Pada halaman Kontrol akses (IAM):
  1. Pilih tab Penetapan peran.
  2. Pilih + Tambahkan dari menu atas lalu Tambahkan penetapan peran dari menu drop-down yang dihasilkan.
A screenshot showing how to navigate to the role assignments tab and the location of the button used to add role assignments to a resource group.
Halaman Tambahkan penetapan peran mencantumkan semua peran yang dapat ditetapkan untuk grup sumber daya.
  1. Gunakan kotak pencarian untuk memfilter daftar ke ukuran yang lebih mudah dikelola. Contoh ini menunjukkan cara memfilter peran Blob Penyimpanan.
  2. Pilih peran yang ingin ditetapkan.
Pilih Berikutnya untuk masuk ke layar berikutnya.
A screenshot showing how to filter and select role assignments to be added to the resource group.
Halaman Tambahkan penetapan peran berikutnya memungkinkan Anda menentukan pengguna yang akan ditetapkan perannya.
  1. Pilih Pengguna, grup, atau perwakilan layanan di bawah Tetapkan akses ke.
  2. Pilih + Pilih anggota di bawah Anggota
Kotak dialog akan terbuka di sisi kanan portal Microsoft Azure.
A screenshot showing the radio button to select to assign a role to an Azure AD group and the link used to select the group to assign the role to.
Dalam dialog Pilih anggota:
  1. Kotak teks Pilih dapat digunakan untuk memfilter daftar pengguna dan grup di langganan Anda. Jika diperlukan, ketik beberapa karakter pertama grup Azure AD pengembangan lokal yang Anda buat untuk aplikasi.
  2. Pilih grup Azure AD pengembangan lokal yang terkait dengan aplikasi Anda.
Pilih Pilih di bagian bawah dialog untuk melanjutkan.
A screenshot showing how to filter for and select the Azure AD group for the application in the Select members dialog box.
Grup Azure AD sekarang akan ditampilkan seperti yang dipilih di layar Tambahkan penetapan peran.

Pilih Tinjau + tetapkan untuk masuk ke halaman akhir lalu Tinjau + tetapkan lagi untuk menyelesaikan proses.
A screenshot showing the completed Add role assignment page and the location of the Review + assign button used to complete the process.

4 - Mengatur variabel lingkungan aplikasi

Objek DefaultAzureCredential akan mencari informasi perwakilan layanan dalam sekumpulan variabel lingkungan saat runtime. Ada beberapa cara untuk mengonfigurasi variabel lingkungan saat bekerja dengan .NET tergantung pada alat dan lingkungan Anda.

Terlepas dari pendekatan mana yang Anda pilih, Anda harus mengonfigurasi variabel lingkungan berikut saat bekerja dengan perwakilan layanan.

  • AZURE_CLIENT_ID → Nilai ID aplikasi.
  • AZURE_TENANT_ID → Nilai ID penyewa.
  • AZURE_CLIENT_SECRET → Kata sandi/mandat yang dihasilkan untuk aplikasi.

Saat bekerja secara lokal dengan Visual Studio, variabel lingkungan dapat diatur dalam file launchsettings.json di folder Properties proyek Anda. Saat aplikasi dimulai, nilai-nilai ini akan ditarik secara otomatis. Perlu diingat konfigurasi ini tidak melakukan perjalanan dengan aplikasi Anda saat disebarkan, jadi Anda masih perlu menyiapkan variabel lingkungan pada lingkungan hosting target Anda.

"profiles": {
    "SampleProject": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "applicationUrl": "https://localhost:7177;http://localhost:5177",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "AZURE_CLIENT_ID": "00000000-0000-0000-0000-000000000000",
        "AZURE_TENANT_ID":"11111111-1111-1111-1111-111111111111",
        "AZURE_CLIENT_SECRET": "=abcdefghijklmnopqrstuvwxyz"
      }
    },
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "AZURE_CLIENT_ID": "00000000-0000-0000-0000-000000000000",
        "AZURE_TENANT_ID": "11111111-1111-1111-1111-111111111111",
        "AZURE_CLIENT_SECRET": "=abcdefghijklmnopqrstuvwxyz"
      }
    }
  }

5 - Menerapkan DefaultAzureCredential di aplikasi Anda

DefaultAzureCredential mendukung beberapa metode autentikasi dan menentukan metode autentikasi yang digunakan saat runtime bahasa umum. Dengan cara ini, aplikasi Anda dapat menggunakan metode autentikasi yang berbeda di lingkungan yang berbeda tanpa menerapkan kode khusus lingkungan.

Urutan dan lokasi di mana DefaultAzureCredential mencari kredensial ditemukan di DefaultAzureCredential.

Untuk mengimplementasikan DefaultAzureCredential, pertama-tama tambahkan Azure.Identity dan paket Microsoft.Extensions.Azure secara opsional ke aplikasi Anda. Anda dapat melakukan ini menggunakan baris perintah atau Manajer Paket NuGet.

Buka lingkungan terminal pilihan Anda di direktori proyek aplikasi dan masukkan perintah di bawah ini.

dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure

Layanan Azure umumnya diakses menggunakan kelas klien yang sesuai dari SDK. Kelas dan layanan kustom Anda sendiri harus terdaftar dalam file Program.cs sehingga dapat diakses melalui injeksi dependensi di seluruh aplikasi Anda. Di dalam Program.cs, ikuti langkah-langkah di bawah ini untuk menyiapkan dengan benar layanan Anda dan DefaultAzureCredential.

  1. Sertakan namespace layanan Azure.Identity dan Microsoft.Extensions.Azure dengan pernyataan penggunaan.
  2. Daftarkan layanan Azure menggunakan metode pembantu yang relevan.
  3. Teruskan instans DefaultAzureCredential objek ke UseCredential metode .

Contoh ini ditampilkan di segmen kode berikut.

using Microsoft.Extensions.Azure;
using Azure.Identity;

// Inside of Program.cs
builder.Services.AddAzureClients(x =>
{
    x.AddBlobServiceClient(new Uri("https://<account-name>.blob.core.windows.net"));
    x.UseCredential(new DefaultAzureCredential());
});

Atau, Anda juga dapat menggunakan DefaultAzureCredential layanan Anda secara lebih langsung tanpa bantuan metode pendaftaran Azure tambahan, seperti yang terlihat di bawah ini.

using Azure.Identity;

// Inside of Program.cs
builder.Services.AddSingleton<BlobServiceClient>(x => 
    new BlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"),
        new DefaultAzureCredential()));

Ketika kode di atas dijalankan di stasiun kerja lokal Anda selama pengembangan lokal, kode tersebut akan melihat variabel lingkungan untuk perwakilan layanan aplikasi atau di Visual Studio, VS Code, Azure CLI, atau Azure PowerShell untuk serangkaian kredensial pengembang, yang salah satunya dapat digunakan untuk mengautentikasi aplikasi ke sumber daya Azure selama pengembangan lokal.

Saat disebarkan ke Azure, kode yang sama ini juga dapat mengautentikasi aplikasi Anda ke sumber daya Azure lainnya. DefaultAzureCredential dapat mengambil pengaturan lingkungan dan konfigurasi identitas terkelola untuk mengautentikasi ke layanan lain secara otomatis.