Koneksi ke Azure SQL dengan autentikasi Microsoft Entra dan SqlClient

Berlaku untuk: .NET Framework .NET .NET Standard

Mengunduh ADO.NET

Artikel ini menjelaskan cara menyambungkan ke sumber data Azure SQL dengan menggunakan autentikasi Microsoft Entra dari aplikasi .NET dengan SqlClient.

Catatan

Meskipun MICROSOFT Entra ID adalah nama baru untuk Azure Active Directory (Azure AD), untuk mencegah mengganggu lingkungan yang ada, Azure AD masih tetap berada di beberapa elemen yang dikodekan secara permanen seperti bidang UI, penyedia koneksi, kode kesalahan, dan cmdlet. Dalam artikel ini, dua nama tersebut dapat dipertukarkan.

Gambaran Umum

Autentikasi Microsoft Entra menggunakan identitas di MICROSOFT Entra ID untuk mengakses sumber data seperti Azure SQL Database, Azure SQL Managed Instance, dan Azure Synapse Analytics. Namespace Microsoft.Data.SqlClient memungkinkan aplikasi klien menentukan kredensial Microsoft Entra dalam mode autentikasi yang berbeda saat terhubung ke Azure SQL Database dan Azure SQL Managed Instance. Untuk menggunakan autentikasi Microsoft Entra dengan Azure SQL, Anda harus mengonfigurasi dan mengelola autentikasi Microsoft Entra dengan Azure SQL.

Saat Anda mengatur Authentication properti koneksi di string koneksi, klien dapat memilih mode autentikasi Microsoft Entra pilihan sesuai dengan nilai yang disediakan:

  • Versi Microsoft.Data.SqlClient paling awal mendukung Active Directory Password untuk .NET Framework, .NET Core, dan .NET Standard. Ini juga mendukung Active Directory Integrated autentikasi dan Active Directory Interactive autentikasi untuk .NET Framework.

  • Dimulai dengan Microsoft.Data.SqlClient 2.0.0, dukungan untuk Active Directory Integrated autentikasi dan Active Directory Interactive autentikasi diperluas di .NET Framework, .NET Core, dan .NET Standard.

    Mode autentikasi baru Active Directory Service Principal juga ditambahkan di SqlClient 2.0.0. Ini menggunakan ID klien dan rahasia identitas perwakilan layanan untuk mencapai autentikasi.

  • Mode autentikasi lainnya ditambahkan di Microsoft.Data.SqlClient 2.1.0, termasuk Active Directory Device Code Flow dan Active Directory Managed Identity (juga dikenal sebagai Active Directory MSI). Mode baru ini memungkinkan aplikasi memperoleh token akses untuk terhubung ke server.

Untuk informasi tentang autentikasi Microsoft Entra di luar apa yang dijelaskan bagian berikut ini, lihat Menggunakan autentikasi Microsoft Entra.

Mengatur autentikasi Microsoft Entra

Saat aplikasi tersambung ke sumber data Azure SQL dengan menggunakan autentikasi Microsoft Entra, aplikasi perlu menyediakan mode autentikasi yang valid. Tabel berikut mencantumkan mode autentikasi yang didukung. Aplikasi menentukan mode dengan menggunakan Authentication properti koneksi di string koneksi.

Nilai Deskripsi Versi Microsoft.Data.SqlClient
Kata Sandi Direktori Aktif Mengautentikasi dengan nama pengguna dan kata sandi identitas Microsoft Entra 1.0+
Direktori Aktif Terintegrasi Mengautentikasi dengan identitas Microsoft Entra dengan menggunakan Autentikasi Windows Terintegrasi (IWA) 2.0.0+1
Active Directory Interactive Mengautentikasi dengan identitas Microsoft Entra dengan menggunakan autentikasi interaktif 2.0.0+1
Perwakilan Layanan Direktori Aktif Mengautentikasi dengan perwakilan layanan Microsoft Entra, menggunakan ID klien dan rahasianya 2.0.0+
Alur Kode Perangkat Direktori Aktif Mengautentikasi dengan identitas Microsoft Entra dengan menggunakan mode Alur Kode Perangkat 2.1.0+
Identitas Terkelola Direktori Aktif,
Active Directory MSI
Mengautentikasi menggunakan identitas terkelola yang ditetapkan sistem Microsoft Entra atau ditetapkan pengguna 2.1.0+
Default Direktori Aktif Autentikasi dengan identitas Microsoft Entra dengan menggunakan mekanisme tanpa kata sandi dan non-interaktif termasuk identitas terkelola, Visual Studio Code, Visual Studio, Azure CLI, dll. 3.0.0+
Identitas Beban Kerja Direktori Aktif Autentikasi dengan identitas Microsoft Entra dengan menggunakan Identitas Terkelola yang Ditetapkan Pengguna federasi untuk menyambungkan ke SQL Database dari lingkungan klien Azure yang telah mengaktifkan dukungan untuk Identitas Beban Kerja. 5.2.0+

1 Sebelum mode Microsoft.Data.SqlClient 2.0.0, Active Directory Integrated, dan Active Directory Interactive autentikasi hanya didukung pada .NET Framework.

Menggunakan autentikasi kata sandi

Active Directory Password mode autentikasi mendukung autentikasi ke sumber data Azure dengan ID Microsoft Entra untuk pengguna Microsoft Entra asli atau federasi. Saat Anda menggunakan mode ini, kredensial pengguna harus disediakan di string koneksi. Contoh berikut menunjukkan cara menggunakan Active Directory Password autentikasi.

// Use your own server, database, user ID, and password.
string ConnectionString = @"Server=demo.database.windows.net; Authentication=Active Directory Password; Encrypt=True; Database=testdb; User Id=user@domain.com; Password=***";

using (SqlConnection conn = new SqlConnection(ConnectionString)) {
    conn.Open();
}

Menggunakan autentikasi terintegrasi

Untuk menggunakan Active Directory Integrated mode autentikasi, Anda harus memiliki instans Active Directory lokal yang digabungkan ke ID Microsoft Entra di cloud. Anda dapat melakukan federasi dengan menggunakan Layanan Federasi Direktori Aktif (AD FS), misalnya.

Saat masuk ke komputer yang bergabung dengan domain, Anda dapat mengakses sumber data Azure SQL tanpa dimintai kredensial dengan mode ini. Anda tidak dapat menentukan nama pengguna dan kata sandi di string koneksi untuk aplikasi .NET Framework. Nama pengguna bersifat opsional dalam string koneksi untuk aplikasi .NET Core dan .NET Standard. Anda tidak dapat mengatur Credential properti Sql Koneksi ion dalam mode ini.

Cuplikan kode berikut adalah contoh kapan Active Directory Integrated autentikasi sedang digunakan.

// Use your own server and database.
string ConnectionString1 = @"Server=demo.database.windows.net; Authentication=Active Directory Integrated; Encrypt=True; Database=testdb";

using (SqlConnection conn = new SqlConnection(ConnectionString1)) {
    conn.Open();
}

// User ID is optional for .NET Core and .NET Standard.
string ConnectionString2 = @"Server=demo.database.windows.net; Authentication=Active Directory Integrated; Encrypt=True; Database=testdb; User Id=user@domain.com";

using (SqlConnection conn = new SqlConnection(ConnectionString2)) {
    conn.Open();
}

Menggunakan autentikasi interaktif

Active Directory Interactive autentikasi mendukung teknologi autentikasi multifaktor untuk terhubung ke sumber data Azure SQL. Jika Anda menyediakan mode autentikasi ini di string koneksi, layar autentikasi Azure muncul dan meminta pengguna untuk memasukkan kredensial yang valid. Anda tidak dapat menentukan kata sandi di string koneksi.

Anda tidak dapat mengatur Credential properti Sql Koneksi ion dalam mode ini. Dengan Microsoft.Data.SqlClient 2.0.0 dan yang lebih baru, nama pengguna diizinkan dalam string koneksi saat Anda berada dalam mode interaktif.

Contoh berikut menunjukkan cara menggunakan Active Directory Interactive autentikasi.

// Use your own server, database, and user ID.
// User ID is optional.
string ConnectionString1 = @"Server=demo.database.windows.net; Authentication=Active Directory Interactive; Encrypt=True; Database=testdb; User Id=user@domain.com";

using (SqlConnection conn = new SqlConnection(ConnectionString1)) {
    conn.Open();
}

// User ID is not provided.
string ConnectionString2 = @"Server=demo.database.windows.net; Authentication=Active Directory Interactive; Encrypt=True; Database=testdb";

using (SqlConnection conn = new SqlConnection(ConnectionString2)) {
    conn.Open();
}

Menggunakan autentikasi perwakilan layanan

Dalam Active Directory Service Principal mode autentikasi, aplikasi klien dapat terhubung ke sumber data Azure SQL dengan memberikan ID klien dan rahasia identitas perwakilan layanan. Autentikasi perwakilan layanan melibatkan:

  1. Menyiapkan pendaftaran aplikasi dengan rahasia.
  2. Memberikan izin ke aplikasi di instans Azure SQL Database.
  3. Koneksi dengan kredensial yang benar.

Contoh berikut menunjukkan cara menggunakan Active Directory Service Principal autentikasi.

// Use your own server, database, app ID, and secret.
string ConnectionString = @"Server=demo.database.windows.net; Authentication=Active Directory Service Principal; Encrypt=True; Database=testdb; User Id=AppId; Password=secret";

using (SqlConnection conn = new SqlConnection(ConnectionString)) {
    conn.Open();
}

Menggunakan autentikasi alur kode perangkat

Dengan Microsoft Authentication Library untuk .NET (MSAL.NET), Active Directory Device Code Flow autentikasi memungkinkan aplikasi klien terhubung ke sumber data Azure SQL dari perangkat dan sistem operasi yang tidak memiliki browser web interaktif. Autentikasi interaktif dilakukan pada perangkat lain. Untuk informasi selengkapnya tentang autentikasi alur kode perangkat, lihat Alur Kode Perangkat OAuth 2.0.

Ketika mode ini digunakan, Anda tidak dapat mengatur Credential properti .SqlConnection Selain itu, nama pengguna dan kata sandi tidak boleh ditentukan dalam string koneksi.

Cuplikan kode berikut adalah contoh penggunaan Active Directory Device Code Flow autentikasi.

Catatan

Batas waktu untuk Active Directory Device Code Flow default ke pengaturan koneksi Connect Timeout . Pastikan untuk menentukan Connect Timeout yang menyediakan cukup waktu untuk melalui proses autentikasi aliran kode perangkat.

// Use your own server and database and increase Connect Timeout as needed for device code flow.
string ConnectionString = @"Server=demo.database.windows.net; Authentication=Active Directory Device Code Flow; Encrypt=True; Database=testdb; Connect Timeout=180;";

using (SqlConnection conn = new SqlConnection(ConnectionString)) {
    conn.Open();
}

Menggunakan autentikasi identitas terkelola

Autentikasi dengan Identitas Terkelola untuk sumber daya Azure adalah metode autentikasi yang direkomendasikan untuk akses terprogram ke SQL. Aplikasi klien dapat menggunakan identitas terkelola yang ditetapkan sistem atau ditetapkan pengguna dari sumber daya untuk mengautentikasi ke SQL dengan ID Microsoft Entra, dengan memberikan identitas dan menggunakannya untuk mendapatkan token akses. Metode ini menghilangkan kebutuhan untuk mengelola kredensial dan rahasia, dan dapat menyederhanakan manajemen akses.

Ada dua jenis identitas terkelola:

  • Identitas terkelola yang ditetapkan sistem dibuat sebagai bagian dari sumber daya Azure (seperti instans terkelola SQL Anda atau server logis), dan berbagi siklus hidup sumber daya tersebut. Identitas yang ditetapkan sistem hanya dapat dikaitkan dengan satu sumber daya Azure.
  • Identitas terkelola yang ditetapkan pengguna dibuat sebagai sumber daya Azure mandiri. Ini dapat ditetapkan ke satu atau beberapa instans layanan Azure.

Untuk informasi selengkapnya tentang identitas terkelola, lihat Tentang identitas terkelola untuk sumber daya Azure.

Sejak Microsoft.Data.SqlClient 2.1.0, driver mendukung autentikasi ke Azure SQL Database, Azure Synapse Analytics, dan Azure SQL Managed Instance dengan memperoleh token akses melalui identitas terkelola. Untuk menggunakan autentikasi ini, tentukan baik Active Directory Managed Identity atau Active Directory MSI di string koneksi, dan tidak diperlukan kata sandi. Anda juga tidak dapat mengatur Credential properti SqlConnection dalam mode ini.

Untuk identitas terkelola yang ditetapkan pengguna, id klien identitas terkelola harus disediakan saat menggunakan Microsoft.Data.SqlClient v3.0 atau yang lebih baru. Jika menggunakan Microsoft.Data.SqlClient v2.1, id objek identitas terkelola harus disediakan.

Contoh berikut menunjukkan cara menggunakan Active Directory Managed Identity autentikasi dengan identitas terkelola yang ditetapkan sistem.

// For system-assigned managed identity
// Use your own values for Server and Database.
string ConnectionString1 = @"Server=demo.database.windows.net; Authentication=Active Directory Managed Identity; Encrypt=True; Database=testdb";

using (SqlConnection conn = new SqlConnection(ConnectionString1)) {
    conn.Open();
}

string ConnectionString2 = @"Server=demo.database.windows.net; Authentication=Active Directory MSI; Encrypt=True; Database=testdb";

using (SqlConnection conn = new SqlConnection(ConnectionString2)) {
    conn.Open();
}

Contoh berikut menunjukkan Active Directory Managed Identity autentikasi dengan identitas terkelola yang ditetapkan pengguna dengan Microsoft.Data.SqlClient v3.0 dan seterusnya.

// For user-assigned managed identity
// Use your own values for Server, Database, and User Id.

// With Microsoft.Data.SqlClient v3.0+
string ConnectionString1 = @"Server=demo.database.windows.net; Authentication=Active Directory Managed Identity; Encrypt=True; User Id=ClientIdOfManagedIdentity; Database=testdb";

using (SqlConnection conn = new SqlConnection(ConnectionString1)) {
    conn.Open();
}

// With Microsoft.Data.SqlClient v3.0+
string ConnectionString2 = @"Server=demo.database.windows.net; Authentication=Active Directory MSI; Encrypt=True; User Id=ClientIdOfManagedIdentity; Database=testdb";

using (SqlConnection conn = new SqlConnection(ConnectionString2)) {
    conn.Open();
}

Contoh berikut menunjukkan Active Directory Managed Identity autentikasi dengan identitas terkelola yang ditetapkan pengguna dengan Microsoft.Data.SqlClient v2.1.

// For user-assigned managed identity
// Use your own values for Server, Database, and User Id.

// With Microsoft.Data.SqlClient v2.1
string ConnectionString1 = @"Server=demo.database.windows.net; Authentication=Active Directory Managed Identity; Encrypt=True; User Id=ObjectIdOfManagedIdentity; Database=testdb";

using (SqlConnection conn = new SqlConnection(ConnectionString1)) {
    conn.Open();
}

// With Microsoft.Data.SqlClient v2.1
string ConnectionString2 = @"Server=demo.database.windows.net; Authentication=Active Directory MSI; Encrypt=True; User Id=ObjectIdOfManagedIdentity; Database=testdb";

using (SqlConnection conn = new SqlConnection(ConnectionString2)) {
    conn.Open();
}

Menggunakan autentikasi default

Tersedia mulai versi 3.0, mode autentikasi ini melebarkan kemungkinan autentikasi pengguna. Mode ini memperluas solusi masuk ke lingkungan klien, Visual Studio Code, Visual Studio, Azure CLI, dll.

Dengan mode autentikasi ini, driver memperoleh token dengan meneruskan "DefaultAzureCredential" dari pustaka Azure Identity untuk memperoleh token akses. Mode ini mencoba menggunakan sekumpulan jenis kredensial untuk memperoleh token akses secara berurutan. Bergantung pada versi pustaka Azure Identity yang digunakan, set kredensial bervariasi. Perbedaan spesifik versi dicatat dalam daftar. Untuk perilaku spesifik versi Azure Identity, lihat dokumen Azure.Identity API.

  • EnvironmentCredential
    • Mengaktifkan autentikasi dengan ID Microsoft Entra menggunakan klien dan rahasia, atau nama pengguna dan kata sandi, detail yang dikonfigurasi dalam variabel lingkungan berikut: AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_CLIENT_CERTIFICATE_PATH, AZURE_USERNAME, AZURE_PASSWORD (Detail selengkapnya)
  • WorkloadIdentityCredential
    • Mengaktifkan autentikasi ID Beban Kerja Microsoft Entra di Kubernetes dan host lain yang mendukung identitas beban kerja. Untuk informasi selengkapnya, lihat Microsoft Entra Workload ID. Tersedia mulai dari Azure Identity versi 1.10 dan Microsoft.Data.SqlClient 5.1.4.
  • ManagedIdentityCredential
    • Mencoba autentikasi dengan ID Microsoft Entra menggunakan identitas terkelola yang ditetapkan ke lingkungan penyebaran. "Id Klien" dari "Identitas Terkelola yang Ditetapkan Pengguna" dibaca dari properti koneksi "Id Pengguna".
  • SharedTokenCacheCredential
    • Mengautentikasi menggunakan token di cache lokal yang dibagikan antara aplikasi Microsoft.
  • VisualStudioCredential
    • Mengaktifkan autentikasi dengan MICROSOFT Entra ID menggunakan data dari Visual Studio
  • VisualStudioCodeCredential
    • Mengaktifkan autentikasi dengan MICROSOFT Entra ID menggunakan data dari Visual Studio Code.
  • AzurePowerShellCredential
    • Mengaktifkan autentikasi dengan ID Microsoft Entra menggunakan Azure PowerShell. Tersedia mulai dari Azure Identity versi 1.6 dan Microsoft.Data.SqlClient 5.0.
  • AzureCliCredential
    • Mengaktifkan autentikasi dengan MICROSOFT Entra ID menggunakan Azure CLI untuk mendapatkan token akses.
  • AzureDeveloperCliCredential
    • Mengaktifkan autentikasi ke MICROSOFT Entra ID menggunakan Azure Developer CLI untuk mendapatkan token akses. Tersedia mulai dari Azure Identity versi 1.10 dan Microsoft.Data.SqlClient 5.1.4.

Catatan

InteractiveBrowserCredential dinonaktifkan dalam implementasi driver "Active Directory Default", dan "Active Directory Interactive" adalah satu-satunya opsi yang tersedia untuk memperoleh token menggunakan autentikasi MFA/Interaktif.

Opsi penyesuaian lebih lanjut saat ini tidak tersedia.

Contoh berikut menunjukkan cara menggunakan autentikasi Default Direktori Aktif.

// Use your own server, database
string ConnectionString = @"Server=demo.database.windows.net; Authentication=Active Directory Default; Encrypt=True; Database=testdb;";

using (SqlConnection conn = new SqlConnection(ConnectionString)) {
    conn.Open();
}

Menggunakan autentikasi identitas beban kerja

Tersedia mulai versi 5.2, seperti dengan identitas terkelola, mode autentikasi identitas beban kerja menggunakan nilai parameter Id Pengguna di string koneksi untuk Id Kliennya jika ditentukan. Tetapi tidak seperti identitas terkelola, WorkloadIdentityCredentialOptions default nilainya dari variabel lingkungan: AZURE_TENANT_ID, AZURE_CLIENT_ID, dan AZURE_FEDERATED_TOKEN_FILE. Namun, hanya Id Klien yang dapat ditimpa oleh string koneksi.

Contoh berikut menunjukkan Active Directory Workload Identity autentikasi dengan identitas terkelola yang ditetapkan pengguna dengan Microsoft.Data.SqlClient v5.2 dan seterusnya.

// Use your own values for Server, Database, and User Id.
// With Microsoft.Data.SqlClient v5.2+
string ConnectionString = @"Server=demo.database.windows.net; Authentication=Active Directory Workload Identity; Encrypt=True; User Id=ClientIdOfManagedIdentity; Database=testdb";

using (SqlConnection conn = new SqlConnection(ConnectionString)) {
    conn.Open();
}

Menyesuaikan autentikasi Microsoft Entra

Selain menggunakan autentikasi Microsoft Entra yang disertakan dalam driver, Microsoft.Data.SqlClient 2.1.0 dan yang lebih baru menyediakan opsi untuk menyesuaikan autentikasi Microsoft Entra kepada aplikasi. Penyesuaian didasarkan pada ActiveDirectoryAuthenticationProvider kelas , yang berasal dari SqlAuthenticationProvider kelas abstrak.

Selama autentikasi Microsoft Entra, aplikasi klien dapat menentukan kelasnya sendiri ActiveDirectoryAuthenticationProvider dengan:

  • Menggunakan metode panggilan balik yang disesuaikan.
  • Meneruskan ID klien aplikasi ke pustaka MSAL melalui driver SqlClient untuk mengambil token akses.

Contoh berikut menampilkan cara menggunakan panggilan balik kustom saat Active Directory Device Code Flow autentikasi sedang digunakan.

using System;
using System.Threading.Tasks;
using Microsoft.Identity.Client;
using Microsoft.Data.SqlClient;

namespace CustomAuthenticationProviderExamples
{
    public class Program
    {
        public static void Main()
        {
            SqlAuthenticationProvider authProvider = new ActiveDirectoryAuthenticationProvider(CustomDeviceFlowCallback);
            SqlAuthenticationProvider.SetProvider(SqlAuthenticationMethod.ActiveDirectoryDeviceCodeFlow, authProvider);
            using (SqlConnection sqlConnection = new SqlConnection("Server=<myserver>.database.windows.net;Authentication=Active Directory Device Code Flow;Database=<db>;"))
            {
                sqlConnection.Open();
                Console.WriteLine("Connected successfully!");
            }
        }

        private static Task CustomDeviceFlowCallback(DeviceCodeResult result)
        {
            // Provide custom logic to process result information and read device code.
            Console.WriteLine(result.Message);
            return Task.FromResult(0);
        }
    }
}

Dengan kelas yang disesuaikan ActiveDirectoryAuthenticationProvider , ID klien aplikasi yang ditentukan pengguna dapat diteruskan ke SqlClient saat mode autentikasi Microsoft Entra yang didukung sedang digunakan. Mode autentikasi Microsoft Entra yang didukung meliputi Active Directory Password, , Active Directory Integrated, Active Directory InteractiveActive Directory Service Principal, dan Active Directory Device Code Flow.

ID klien aplikasi juga dapat dikonfigurasi melalui SqlAuthenticationProviderConfigurationSection atau SqlClientAuthenticationProviderConfigurationSection. Properti applicationClientId konfigurasi berlaku untuk .NET Framework 4.6+ dan .NET Core 2.1+.

Cuplikan kode berikut adalah contoh penggunaan kelas yang disesuaikan ActiveDirectoryAuthenticationProvider dengan ID klien aplikasi yang ditentukan pengguna saat Active Directory Interactive autentikasi sedang digunakan.

using System;
using Microsoft.Data.SqlClient;

namespace CustomAuthenticationProviderExamples
{
    public class Program
    {
        public static void Main()
        {
            // Supported for all authentication modes supported by ActiveDirectoryAuthenticationProvider
            ActiveDirectoryAuthenticationProvider provider = new ActiveDirectoryAuthenticationProvider("<application_client_id>");
            if (provider.IsSupported(SqlAuthenticationMethod.ActiveDirectoryInteractive))
            {
                SqlAuthenticationProvider.SetProvider(SqlAuthenticationMethod.ActiveDirectoryInteractive, provider);
            }
            
            using (SqlConnection sqlConnection = new SqlConnection("Server=<myserver>.database.windows.net;Authentication=Active Directory Interactive;Database=<db>;"))
            {
                sqlConnection.Open();
                Console.WriteLine("Connected successfully!");
            }
        }
    }
}

Contoh berikut menunjukkan cara mengatur ID klien aplikasi melalui bagian konfigurasi.

<configuration>
  <configSections>
    <section name="SqlClientAuthenticationProviders"
             type="Microsoft.Data.SqlClient.SqlClientAuthenticationProviderConfigurationSection, Microsoft.Data.SqlClient" />
  </configSections>
  <SqlClientAuthenticationProviders applicationClientId ="<GUID>" />
</configuration>

<!--or-->

<configuration>
  <configSections>
    <section name="SqlAuthenticationProviders"
             type="Microsoft.Data.SqlClient.SqlAuthenticationProviderConfigurationSection, Microsoft.Data.SqlClient" />
  </configSections>
  <SqlAuthenticationProviders applicationClientId ="<GUID>" />
</configuration>

Dukungan untuk penyedia autentikasi SQL kustom

Mengingat lebih banyak fleksibilitas, aplikasi klien juga dapat menggunakan penyedianya sendiri untuk autentikasi Microsoft Entra alih-alih menggunakan ActiveDirectoryAuthenticationProvider kelas . Penyedia autentikasi kustom harus menjadi subkelas dengan metode yang ditimpa SqlAuthenticationProvider . Kemudian harus mendaftarkan penyedia kustom, menimpa satu atau beberapa metode autentikasi yang ada Active Directory* .

Contoh berikut menunjukkan cara menggunakan penyedia autentikasi baru untuk Active Directory Device Code Flow autentikasi.

using System;
using System.Threading.Tasks;
using Microsoft.Identity.Client;
using Microsoft.Data.SqlClient;

namespace CustomAuthenticationProviderExamples
{
    /// <summary>
    /// Example demonstrating creating a custom device code flow authentication provider and attaching it to the driver.
    /// This is helpful for applications that wish to override the Callback for the Device Code Result implemented by the SqlClient driver.
    /// </summary>
    public class CustomDeviceCodeFlowAzureAuthenticationProvider : SqlAuthenticationProvider
    {
        public override async Task<SqlAuthenticationToken> AcquireTokenAsync(SqlAuthenticationParameters parameters)
        {
            string clientId = "my-client-id";
            string clientName = "My Application Name";
            string s_defaultScopeSuffix = "/.default";

            string[] scopes = new string[] { parameters.Resource.EndsWith(s_defaultScopeSuffix) ? parameters.Resource : parameters.Resource + s_defaultScopeSuffix };

            IPublicClientApplication app = PublicClientApplicationBuilder.Create(clientId)
                .WithAuthority(parameters.Authority)
                .WithClientName(clientName)
                .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
                .Build();

            AuthenticationResult result = await app.AcquireTokenWithDeviceCode(scopes,
                    deviceCodeResult => CustomDeviceFlowCallback(deviceCodeResult)).ExecuteAsync();
            return new SqlAuthenticationToken(result.AccessToken, result.ExpiresOn);
        }

        public override bool IsSupported(SqlAuthenticationMethod authenticationMethod) => authenticationMethod.Equals(SqlAuthenticationMethod.ActiveDirectoryDeviceCodeFlow);

        private Task CustomDeviceFlowCallback(DeviceCodeResult result)
        {
            Console.WriteLine(result.Message);
            return Task.FromResult(0);
        }
    }

    public class Program
    {
        public static void Main()
        {
            // Register our custom authentication provider class to override Active Directory Device Code Flow
            SqlAuthenticationProvider.SetProvider(SqlAuthenticationMethod.ActiveDirectoryDeviceCodeFlow, new CustomDeviceCodeFlowAzureAuthenticationProvider());
            using (SqlConnection sqlConnection = new SqlConnection("Server=<myserver>.database.windows.net;Authentication=Active Directory Device Code Flow;Database=<db>;"))
            {
                sqlConnection.Open();
                Console.WriteLine("Connected successfully!");
            }
        }
    }
}

Selain meningkatkan Active Directory Interactive pengalaman autentikasi, Microsoft.Data.SqlClient 2.1.0 dan yang lebih baru menyediakan API berikut untuk aplikasi klien guna menyesuaikan autentikasi interaktif dan autentikasi aliran kode perangkat.

public class ActiveDirectoryAuthenticationProvider
{
    // For .NET Framework targeted applications only
    // Sets a reference to the current System.Windows.Forms.IWin32Window that triggers the browser to be shown. 
    // Used to center the browser pop-up onto this window.
    public void SetIWin32WindowFunc(Func<IWin32Window> iWin32WindowFunc);

    // For .NET Standard targeted applications only
    // Sets a reference to the ViewController (if using Xamarin.iOS), Activity (if using Xamarin.Android) IWin32Window, or IntPtr (if using .NET Framework). 
    // Used for invoking the browser for Active Directory Interactive authentication.
    public void SetParentActivityOrWindowFunc(Func<object> parentActivityOrWindowFunc);

    // For .NET Framework, .NET Core, and .NET Standard targeted applications
    // Sets a callback method that's invoked with a custom web UI instance that will let the user sign in with Azure AD, present consent if needed, and get back the authorization code. 
    // Applicable when working with Active Directory Interactive authentication.
    public void SetAcquireAuthorizationCodeAsyncCallback(Func<Uri, Uri, CancellationToken, Task<Uri>> acquireAuthorizationCodeAsyncCallback);

    // For .NET Framework, .NET Core, and .NET Standard targeted applications
    // Clears cached user tokens from the token provider.
    public static void ClearUserTokenCache();
}

Lihat juga