Metode autentikasi aplikasi

Beralih layanan menggunakan menu tarik-turun Versi. Pelajari selengkapnya tentang navigasi.
Berlaku untuk: ✅ Microsoft Fabric ✅ Azure Data Explorer

Artikel ini memberikan gambaran umum tentang metode autentikasi utama yang tersedia untuk pustaka klien Kusto. Cuplikan kode menunjukkan berbagai cara untuk mengautentikasi pengguna dan aplikasi, memungkinkan interaksi tanpa hambatan dengan kluster Kusto. Setiap metode sesuai dengan skenario dan persyaratan yang berbeda.

Gunakan identitas terkelola alih-alih autentikasi nama pengguna dan kata sandi atau string koneksi jika memungkinkan. Identitas terkelola menawarkan pendekatan yang lebih aman dan efisien untuk autentikasi.

Dalam artikel ini, Anda mempelajari cara mengautentikasi menggunakan:

Induk Aplikasi

Autentikasi identitas terkelola

Prinsipal pengguna

Penyedia token kustom

Prasyarat

Metode autentikasi utama aplikasi

Bagian ini mencakup berbagai metode autentikasi menggunakan prinsipal aplikasi.

Autentikasi identitas terkelola

Ada dua jenis identitas terkelola, yaitu identitas yang ditetapkan sistem dan identitas yang ditetapkan pengguna. Identitas terkelola yang ditetapkan sistem memiliki siklus hidup yang terkait dengan sumber daya yang membuatnya. Identitas ini terbatas pada satu sumber daya. Identitas terkelola yang ditetapkan pengguna dapat digunakan pada banyak sumber daya. Untuk informasi selengkapnya, lihat Identitas Terkelola.

| Dalam contoh berikut, ganti <QueryEndpointUri> dan <ManagedIdentityClientId> dengan nilai Anda.

  • Identitas terkelola yang ditetapkan sistem:

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadSystemManagedIdentity();
    
  • Identitas terkelola yang ditetapkan pengguna. Gunakan ID klien identitas atau ID objek, sebagai berikut:

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadUserManagedIdentity(<ManagedIdentityClientId>);
    

Penting

  • Objek atau ID utama sumber daya identitas terkelola harus diberi peran untuk mengakses kluster Kusto. Anda dapat menetapkan peran di portal Microsoft Azure di halaman sumber daya kluster Kusto Anda di bawah Izin Keamanan + jaringan>. Identitas Terkelola tidak boleh dilampirkan langsung ke kluster Kusto.
  • Autentikasi Identitas Terkelola tidak didukung di lingkungan pengembangan lokal. Untuk menguji autentikasi Identitas Terkelola, sebarkan aplikasi ke Azure atau gunakan metode autentikasi yang berbeda saat bekerja secara lokal.

Otentikasi berbasis sertifikat

Sertifikat berfungsi sebagai rahasia untuk mengautentikasi identitas aplikasi saat meminta token. Ada beberapa metode untuk memuat sertifikat, seperti memuatnya dari penyimpanan kredensial lokal komputer atau dari disk.

| Dalam contoh berikut, ganti <QueryEndpointUri>, , <ApplicationId>, <CertificateSubjectName>, <CertificateIssuerName><CertificateThumbprint>, <CertificateObject>, <AuthorityId>, <PemPublicCertificate>, <PemPrivateKey>, <privateKeyPemFilePath>, <PemCertificatePath>, , dan <EnableSubjectAndIssuerAuth> dengan nilai Anda sendiri.

  • Sertifikat dari penyimpanan sertifikat lokal komputer hanya didukung menggunakan C#:

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadApplicationSubjectAndIssuerAuthentication(<ApplicationId>, <CertificateSubjectName>, <CertificateIssuerName>, <AuthorityId>);
    

    Penting

    Saat Anda menggunakan nama subjek dan penerbit, sertifikat harus diinstal di penyimpanan sertifikat komputer lokal.

  • Sertifikat dari sumber arbitrer, seperti file pada disk, cache, atau penyimpanan aman seperti Azure Key Vault. Objek sertifikat harus berisi kunci privat:

    X509Certificate2 certificate = <CertificateObject>;
    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadApplicationCertificateAuthentication(<ApplicationId>, certificate, <AuthorityId>);
    

    Untuk informasi selengkapnya, lihat String koneksi Kusto.

Penting

Untuk memuat sertifikat dari Azure Key Vault, Anda dapat menggunakan klienAzure.Security.KeyVault.Certificates.

Autentikasi kunci aplikasi

Kunci aplikasi, juga dikenal sebagai kata sandi aplikasi, adalah string rahasia yang digunakan aplikasi untuk mengautentikasi dan membuktikan identitasnya saat meminta token. Ini berfungsi sebagai bentuk kredensial bagi aplikasi untuk mengakses sumber daya yang dilindungi. Kunci aplikasi biasanya dihasilkan dan ditetapkan oleh penyedia identitas atau server otorisasi. Penting untuk mengelola dan melindungi kunci aplikasi dengan aman untuk mencegah akses tidak sah ke informasi atau tindakan sensitif.

| Dalam contoh berikut, ganti <QueryEndpointUri>, , <ApplicationId><ApplicationKey>, <AuthorityId>, dan <AuthorityId> dengan nilai Anda sendiri.

  • Kunci aplikasi:

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadApplicationKeyAuthentication(<ApplicationId>, <ApplicationKey>, <AuthorityId>);
    
  • String koneksi dengan kunci aplikasi:

    var connectionString = "Data Source=<QueryEndpointUri>;Initial Catalog=NetDefaultDB;AAD Federated Security=True;AppClientId=<ApplicationId>;AppKey=<ApplicationKey>;Authority Id=<AuthorityId>;"
    var kcsb = new KustoConnectionStringBuilder(connectionString);
    

Penting

Menanamkan langsung rahasia dalam kode Anda adalah praktik yang buruk. Menyimpan informasi sensitif, seperti kredensial autentikasi, dalam teks biasa menyebabkan kerentanan keamanan. Jaga agar informasi sensitif tetap terenkripsi atau simpan dengan aman di brankas kunci. Menggunakan enkripsi atau brankas kunci memastikan bahwa rahasia Anda dilindungi dan hanya dapat diakses oleh pengguna atau aplikasi yang berwenang.

Metode autentikasi Prinsipal Pengguna

Bagian ini mencakup berbagai metode autentikasi menggunakan prinsipal pengguna.

Autentikasi masuk pengguna interaktif

Metode autentikasi ini menggunakan kredensial pengguna untuk membuat koneksi aman dengan Kusto. Metode ini membuka browser web tempat pengguna diminta untuk memasukkan nama pengguna dan kata sandi mereka untuk menyelesaikan proses autentikasi.

| Dalam contoh berikut, ganti <QueryEndpointUri> ,<AuthorityId>, dan <AuthorityId> dengan nilai Anda sendiri.

  • Masuk pengguna interaktif:

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadUserPromptAuthentication();
    

Autentikasi Antarmuka Baris Perintah Azure (CLI)

Metode autentikasi ini menggunakan Azure Command-Line Interface (CLI) untuk mengautentikasi dan mendapatkan token untuk pengguna. az login Menjalankan perintah berarti pengguna dapat membuat koneksi dengan aman dan mengambil token yang diperlukan untuk tujuan autentikasi. Pengguna mungkin diminta untuk masuk jika token tidak tersedia di cache Azure CLI dan interactive parameter diatur ke true. Untuk informasi selengkapnya, lihat Antarmuka Command-Line Azure (CLI).

| Dalam contoh berikut, ganti <QueryEndpointUri> dengan nilai Anda sendiri.

var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
  .WithAadAzCliAuthentication(interactive: true);

Penting

Metode ini hanya didukung untuk aplikasi .NET Framework.

Autentikasi kode perangkat

Metode ini dirancang untuk perangkat yang tidak memiliki antarmuka pengguna yang tepat untuk masuk, seperti perangkat IoT dan terminal server. Ini memberi pengguna kode dan URL untuk mengautentikasi menggunakan perangkat yang berbeda, seperti smartphone. Metode interaktif ini mengharuskan pengguna untuk masuk melalui browser.

| Dalam contoh berikut, ganti <QueryEndpointUri> dengan nilai Anda sendiri.

var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
  .WithAadDeviceCodeAuthentication((msg, uri, code) =>
  {
    // The callback is used to display instructions to the user on how to authenticate using the device code
    Console.WriteLine("Device Code Message: {0}", msg);
    Console.WriteLine("Device Code Uri: {0}", uri);
    Console.WriteLine("Device Code: {0}", code);

    return Task.CompletedTask;
  });

Penting

Autentikasi kode perangkat dapat diblokir oleh Kebijakan Akses Bersyarat penyewa. Jika diblokir, pilih metode autentikasi alternatif.

Metode autentikasi penyedia token kustom

Bagian ini mencakup berbagai metode autentikasi menggunakan penyedia token kustom.

Penyedia token kustom untuk autentikasi kredensial Identitas Terkelola federasi

Penyedia token kustom dapat digunakan untuk memperoleh token ID Microsoft Entra untuk autentikasi. Contoh berikut menunjukkan cara menggunakan penyedia token kustom untuk mendapatkan token menggunakan identitas terkelola federasi. Anda dapat memodifikasi kode agar sesuai dengan persyaratan aplikasi Anda.

| Dalam contoh berikut, ganti <AuthorityIdId>, <ApplicationId>, <ManagedIdentityClientId>, dan <QueryEndpointUri> dengan nilai Anda sendiri.

public class TokenProvider
{
  private ClientAssertionCredential m_clientAssertion;
  private TokenRequestContext m_tokenRequestContext;

  public TokenProvider(string queryEndpointUri)
  {
    string resourceId = null;

    try
    {
      // Get the appropiate resource id by querying the metadata
      var httpClient = new HttpClient();
      var response = httpClient.GetByteArrayAsync($"{queryEndpointUri}/v1/rest/auth/metadata").Result;
      var json = JObject.Parse(Encoding.UTF8.GetString(response));
      resourceId = json["AzureAD"]?["KustoServiceResourceId"]?.ToString();
      // Append scope to resource id
      resourceId = !string.IsNullOrWhiteSpace(resourceId) ? $"{resourceId}/.default" : null;
    }
    catch { /* Handle exception */}

    m_tokenRequestContext = new TokenRequestContext(new string[] { resourceId ?? "https://kusto.kusto.windows.net/.default" });

    // Create client assertion credential to authenticate with Kusto
    m_clientAssertion = new ClientAssertionCredential
    (
      <AuthorityIdId>,
      <ApplicationId>,
      async (token) =>
      {
        // Get Managed Identity token
        var miCredential = new ManagedIdentityCredential(<ManagedIdentityClientId>);
        var miToken = await miCredential.GetTokenAsync(new TokenRequestContext(new[] {
          "api://AzureADTokenExchange/.default"
        })).ConfigureAwait(false);
        return miToken.Token;
      }
    );
  }

  public async Task<string> GetTokenAsync()
  {
    var accessToken = await m_clientAssertion.GetTokenAsync(m_tokenRequestContext).ConfigureAwait(false);
    return accessToken.Token;
  }
}

var tokenProvider = new TokenProvider(<QueryEndpointUri>);

var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
  .WithAadTokenProviderAuthentication(
    async () =>
    {
      return await tokenProvider.GetTokenAsync();
    });

Menggunakan autentikasi Azure TokenCredential

Buat penyedia token kustom dengan membuat kelas yang mewarisi dari TokenCredential dan mengimplementasikan metode GetToken. Atau, Anda dapat menggunakan penyedia token yang ada seperti DefaultAzureCredential. Metode ini memberikan fleksibilitas untuk skenario autentikasi yang berbeda ketika penyedia token kustom diperlukan.

Anda dapat menggunakan DefaultAzureCredential untuk mendukung kode produksi yang menggunakan autentikasi Identitas Terkelola, atau kode pengujian menggunakan Visual Studio atau Azure CLI. DefaultAzureCredential dapat dikonfigurasi untuk menggunakan metode autentikasi yang berbeda.

| Dalam contoh berikut, ganti <QueryEndpointUri> dan <ManagedIdentityClientId> dengan nilai Anda sendiri.

var credentialProvider = new DefaultAzureCredential(new DefaultAzureCredentialOptions {
  ManagedIdentityClientId = <ManagedIdentityClientId>
 });
var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
  .WithAadAzureTokenCredentialsAuthentication(credentialProvider);

Nota

DefaultAzureCredential digunakan untuk mengautentikasi dengan layanan Azure. Ini mencoba beberapa metode autentikasi untuk mendapatkan token dan dapat dikonfigurasi untuk bekerja dengan Identitas Terkelola, Visual Studio, Azure CLI, dan banyak lagi. Kredensial ini cocok untuk lingkungan pengujian dan produksi karena dapat diatur untuk menggunakan metode autentikasi yang berbeda. Untuk informasi selengkapnya, lihat Kelas DefaultAzureCredential.

Langkah selanjutnya