SqlAuthenticationProvider Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Definiert das Kernverhalten von Authentifizierungsanbietern und stellt eine Basisklasse für abgeleitete Klassen bereit.
public ref class SqlAuthenticationProvider abstract
public abstract class SqlAuthenticationProvider
type SqlAuthenticationProvider = class
Public MustInherit Class SqlAuthenticationProvider
- Vererbung
-
SqlAuthenticationProvider
- Abgeleitet
Beispiele
Das folgende Beispiel veranschaulicht die Implementierung eines benutzerdefinierten SqlAuthenticationProviders und die Bereitstellung desselben für sqlClient zum Überschreiben des Authentifizierungsmodus für Gerätecodefluss:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Data.SqlClient;
using Microsoft.Identity.Client;
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
{
private const string ClientId = "my-client-id";
private const string ClientName = "My Application Name";
private const string DefaultScopeSuffix = "/.default";
// Maintain a copy of the PublicClientApplication object to cache the underlying access tokens it provides
private static IPublicClientApplication pcApplication;
public override async Task<SqlAuthenticationToken> AcquireTokenAsync(SqlAuthenticationParameters parameters)
{
string[] scopes = [ parameters.Resource.EndsWith(DefaultScopeSuffix) ? parameters.Resource : parameters.Resource + DefaultScopeSuffix ];
IPublicClientApplication app = pcApplication;
if (app == null)
{
pcApplication = app = PublicClientApplicationBuilder.Create(ClientId)
.WithAuthority(parameters.Authority)
.WithClientName(ClientName)
.WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
.Build();
}
AuthenticationResult result;
using CancellationTokenSource connectionTimeoutCancellation = new CancellationTokenSource(TimeSpan.FromSeconds(parameters.ConnectionTimeout));
try
{
IEnumerable<IAccount> accounts = await app.GetAccountsAsync();
result = await app.AcquireTokenSilent(scopes, accounts.FirstOrDefault())
.ExecuteAsync(connectionTimeoutCancellation.Token);
}
catch (MsalUiRequiredException)
{
result = await app.AcquireTokenWithDeviceCode(scopes, deviceCodeResult => CustomDeviceFlowCallback(deviceCodeResult))
.ExecuteAsync(connectionTimeoutCancellation.Token);
}
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.CompletedTask;
}
}
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!");
}
}
}
}
Hinweise
Abgeleitete Klassen müssen einen parameterlosen Konstruktor bereitstellen, wenn sie aus der app.config Datei instanziiert werden können.
Konstruktoren
| Name | Beschreibung |
|---|---|
| SqlAuthenticationProvider() |
Definiert das Kernverhalten von Authentifizierungsanbietern und stellt eine Basisklasse für abgeleitete Klassen bereit. |
Methoden
| Name | Beschreibung |
|---|---|
| AcquireTokenAsync(SqlAuthenticationParameters) |
Erwirbt ein Zugriffstoken von der Autorität. |
| BeforeLoad(SqlAuthenticationMethod) |
Diese Methode wird unmittelbar aufgerufen, bevor der Anbieter zur Registrierung des SQL-Authentifizierungsanbieters hinzugefügt wird. |
| BeforeUnload(SqlAuthenticationMethod) |
Diese Methode wird unmittelbar aufgerufen, bevor der Anbieter aus der REGISTRIERUNG des SQL-Authentifizierungsanbieters entfernt wird. |
| GetProvider(SqlAuthenticationMethod) |
Ruft einen Authentifizierungsanbieter nach Methode ab. |
| IsSupported(SqlAuthenticationMethod) |
Gibt an, ob die angegebene Authentifizierungsmethode unterstützt wird. |
| SetProvider(SqlAuthenticationMethod, SqlAuthenticationProvider) |
Legt einen Authentifizierungsanbieter nach Methode fest. |