diff --git a/doc/samples/AADAuthenticationCustomDeviceFlowCallback.cs b/doc/samples/AADAuthenticationCustomDeviceFlowCallback.cs
new file mode 100644
index 0000000000..d225f64ae8
--- /dev/null
+++ b/doc/samples/AADAuthenticationCustomDeviceFlowCallback.cs
@@ -0,0 +1,30 @@
+//
+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=.database.windows.net;Authentication=Active Directory Device Code Flow;Database=;"))
+ {
+ 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);
+ }
+ }
+}
+//
diff --git a/doc/samples/ApplicationClientIdAzureAuthenticationProvider.cs b/doc/samples/ApplicationClientIdAzureAuthenticationProvider.cs
new file mode 100644
index 0000000000..f206a1c29e
--- /dev/null
+++ b/doc/samples/ApplicationClientIdAzureAuthenticationProvider.cs
@@ -0,0 +1,26 @@
+//
+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("");
+ if (provider.IsSupported(SqlAuthenticationMethod.ActiveDirectoryInteractive))
+ {
+ SqlAuthenticationProvider.SetProvider(SqlAuthenticationMethod.ActiveDirectoryInteractive, provider);
+ }
+
+ using (SqlConnection sqlConnection = new SqlConnection("Server=.database.windows.net;Authentication=Active Directory Interactive;Database=;"))
+ {
+ sqlConnection.Open();
+ Console.WriteLine("Connected successfully!");
+ }
+ }
+ }
+}
+//
diff --git a/doc/samples/CustomDeviceCodeFlowAzureAuthenticationProvider.cs b/doc/samples/CustomDeviceCodeFlowAzureAuthenticationProvider.cs
new file mode 100644
index 0000000000..e71c9af8d1
--- /dev/null
+++ b/doc/samples/CustomDeviceCodeFlowAzureAuthenticationProvider.cs
@@ -0,0 +1,57 @@
+//
+using System;
+using System.Threading.Tasks;
+using Microsoft.Identity.Client;
+using Microsoft.Data.SqlClient;
+
+namespace CustomAuthenticationProviderExamples
+{
+ ///
+ /// 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.
+ ///
+ public class CustomDeviceCodeFlowAzureAuthenticationProvider : SqlAuthenticationProvider
+ {
+ public override async Task 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=.database.windows.net;Authentication=Active Directory Device Code Flow;Database=;"))
+ {
+ sqlConnection.Open();
+ Console.WriteLine("Connected successfully!");
+ }
+ }
+ }
+}
+//