SqlAuthenticationProvider Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Définit le comportement principal des fournisseurs d’authentification et fournit une classe de base pour les classes dérivées.
public ref class SqlAuthenticationProvider abstract
public abstract class SqlAuthenticationProvider
type SqlAuthenticationProvider = class
Public MustInherit Class SqlAuthenticationProvider
- Héritage
-
SqlAuthenticationProvider
- Dérivé
Exemples
L’exemple suivant illustre l’implémentation d’un SqlAuthenticationProvider personnalisé et la même fourniture à SqlClient pour remplacer le mode d’authentification de flux de code d’appareil :
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!");
}
}
}
}
Remarques
Les classes dérivées doivent fournir un constructeur sans paramètre s’ils peuvent être instanciés à partir du fichier app.config.
Constructeurs
| Nom | Description |
|---|---|
| SqlAuthenticationProvider() |
Définit le comportement principal des fournisseurs d’authentification et fournit une classe de base pour les classes dérivées. |
Méthodes
| Nom | Description |
|---|---|
| AcquireTokenAsync(SqlAuthenticationParameters) |
Acquiert un jeton d’accès à partir de l’autorité. |
| BeforeLoad(SqlAuthenticationMethod) |
Cette méthode est appelée immédiatement avant l’ajout du fournisseur au registre du fournisseur d’authentification SQL. |
| BeforeUnload(SqlAuthenticationMethod) |
Cette méthode est appelée immédiatement avant que le fournisseur soit supprimé du registre du fournisseur d’authentification SQL. |
| GetProvider(SqlAuthenticationMethod) |
Obtient un fournisseur d’authentification par méthode. |
| IsSupported(SqlAuthenticationMethod) |
Indique si la méthode d’authentification spécifiée est prise en charge. |
| SetProvider(SqlAuthenticationMethod, SqlAuthenticationProvider) |
Définit un fournisseur d’authentification par méthode. |