Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Переключайте службы с помощью раскрывающегося списка Версия. Дополнительные сведения о навигации.
Область применения: ✅ Microsoft Fabric ✅ Azure Data Explorer
В этой статье представлен обзор основных методов проверки подлинности, доступных для клиентских библиотек Kusto. Фрагменты кода показывают различные способы проверки подлинности пользователей и приложений, что позволяет легко взаимодействовать с кластерами Kusto. Каждый метод подходит для различных сценариев и требований.
По возможности используйте управляемые удостоверения вместо имени пользователя, аутентификации с использованием пароля или строк подключения. Управляемые удостоверения обеспечивают более безопасный и упрощенный подход к проверке подлинности.
Из этой статьи вы узнаете, как выполнить проверку подлинности с помощью:
Основной объект приложения
Проверка подлинности управляемого удостоверения
Главный пользователь
- Интерактивная проверка подлинности входа пользователей
- Проверка подлинности интерфейса Command-Line Azure (CLI)
- проверка подлинности кода устройства
Поставщик пользовательских токенов
Предпосылки
- Настройка среды разработки для использования клиентской библиотеки Kusto
Методы проверки подлинности субъекта приложения
В этом разделе рассматриваются различные методы аутентификации с использованием учетной записи приложения.
Аутентификация управляемой идентификации
Существует два типа управляемых удостоверений: назначаемые системой и назначаемые пользователем. Управляемые удостоверения, назначаемые системой, имеют жизненный цикл, который зависит от ресурса, создающего их. Это идентификация ограничена одним ресурсом. Назначаемые пользователем управляемые удостоверения могут использоваться для нескольких ресурсов. Дополнительные сведения см. в разделе Управляемые удостоверения.
В следующих примерах замените <QueryEndpointUri> и <ManagedIdentityClientId> вашими значениями.
Управляемое удостоверение, назначаемое системой:
var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>) .WithAadSystemManagedIdentity();Управляемая пользователем назначенная идентичность Используйте идентификатор клиента идентификации или идентификатор объекта, как показано ниже.
var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>) .WithAadUserManagedIdentity(<ManagedIdentityClientId>);
Это важно
- Для доступа к кластеру Kusto необходимо назначить объекту или основному идентификатору управляемого ресурса удостоверения роль. Роль можно назначить на портале Azure на странице ресурсов кластера Kusto в разделе "Безопасность и сетевые>разрешения". Управляемое удостоверение не должно быть непосредственно присоединено к кластеру Kusto.
- Проверка подлинности управляемого удостоверения не поддерживается в локальных средах разработки. Чтобы проверить проверку подлинности управляемого удостоверения, разверните приложение в Azure или используйте другой метод проверки подлинности при локальной работе.
Проверка подлинности на основе сертификатов
Сертификаты служат секретами для аутентификации приложения при запросе токена. Существует несколько методов загрузки сертификата, таких как загрузка сертификата из локального хранилища учетных данных компьютера или с диска.
| В следующих примерах замените <QueryEndpointUri>, <ApplicationId><CertificateSubjectName><CertificateIssuerName><CertificateThumbprint><CertificateObject><AuthorityId><PemPublicCertificate>, <PemPrivateKey><privateKeyPemFilePath><PemCertificatePath>, и <EnableSubjectAndIssuerAuth> собственными значениями.
Сертификат из локального хранилища сертификатов компьютера поддерживается только с помощью C#:
var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>) .WithAadApplicationSubjectAndIssuerAuthentication(<ApplicationId>, <CertificateSubjectName>, <CertificateIssuerName>, <AuthorityId>);Это важно
При использовании имени субъекта и издателя сертификат должен быть установлен в хранилище сертификатов локального компьютера.
Сертификат из произвольного источника, например файл на диске, кэше или безопасном хранилище, например Azure Key Vault. Объект сертификата должен содержать закрытый ключ:
X509Certificate2 certificate = <CertificateObject>; var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>) .WithAadApplicationCertificateAuthentication(<ApplicationId>, certificate, <AuthorityId>);Дополнительные сведения см. в разделе "Строки подключения Kusto".
Это важно
Чтобы загрузить сертификаты из Azure Key Vault, можно использовать клиентAzure.Security.KeyVault.Certificates.
Проверка подлинности ключа приложения
Ключ приложения, также известный как пароль приложения, является секретной строкой, которую приложение использует для проверки подлинности и подтверждения идентичности при запросе токена. Он служит формой учетных данных для приложения для доступа к защищенным ресурсам. Ключ приложения обычно создается и назначается поставщиком удостоверений или сервером авторизации. Важно безопасно управлять ключом приложения и защищать его, чтобы предотвратить несанкционированный доступ к конфиденциальной информации или действиям.
| В следующих примерах замените <QueryEndpointUri>, <ApplicationId><ApplicationKey>, <AuthorityId>и <AuthorityId> собственными значениями.
Ключ приложения:
var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>) .WithAadApplicationKeyAuthentication(<ApplicationId>, <ApplicationKey>, <AuthorityId>);Строка подключения с ключом приложения:
var connectionString = "Data Source=<QueryEndpointUri>;Initial Catalog=NetDefaultDB;AAD Federated Security=True;AppClientId=<ApplicationId>;AppKey=<ApplicationKey>;Authority Id=<AuthorityId>;" var kcsb = new KustoConnectionStringBuilder(connectionString);
Это важно
Жесткое кодирование секретов в коде является плохой практикой. Хранение конфиденциальных данных, таких как учетные данные проверки подлинности, в обычном тексте приводит к уязвимостям безопасности. Храните конфиденциальные данные в зашифрованном виде или храните их в хранилище ключей. Использование шифрования или хранилища ключей гарантирует, что секреты защищены и доступны только авторизованным пользователям или приложениям.
Методы проверки подлинности главного пользователя
В этом разделе рассматриваются различные методы проверки подлинности с помощью учетной записи пользователя.
Интерактивная проверка подлинности входа пользователей
Этот метод проверки подлинности использует учетные данные пользователя для установления безопасного подключения к Kusto. Метод открывает веб-браузер, в котором пользователю предлагается ввести имя пользователя и пароль, чтобы завершить процесс проверки подлинности.
| В следующих примерах замените <QueryEndpointUri> ,<AuthorityId>и <AuthorityId> собственными значениями.
Интерактивный вход пользователя:
var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>) .WithAadUserPromptAuthentication();
Проверка подлинности интерфейса Command-Line Azure (CLI)
Этот метод аутентификации использует Azure Command-Line Interface (CLI) для аутентификации пользователей и получения токена.
az login Выполнение команды означает, что пользователь может безопасно установить подключение и получить необходимый маркер для проверки подлинности. Пользователю может потребоваться выполнить вход, если маркер недоступен в кэше Azure CLI, а параметр interactive задан как true. Для получения дополнительной информации см. Azure Command-Line Interface (CLI).
В следующем примере замените <QueryEndpointUri> на собственное значение.
var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
.WithAadAzCliAuthentication(interactive: true);
Это важно
Этот метод поддерживается только для приложений .NET Framework.
аутентификация с помощью кода устройства;
Этот метод предназначен для устройств, не имеющих соответствующего пользовательского интерфейса для входа, например устройств Интернета вещей и терминалов сервера. Он предоставляет пользователю код и URL-адрес для проверки подлинности с помощью другого устройства, например смартфона. Этот интерактивный метод требует, чтобы пользователь войдите через браузер.
В следующем примере замените <QueryEndpointUri> на собственное значение.
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;
});
Это важно
Проверка подлинности кода устройства может быть заблокирована политиками условного доступа клиента. При блокировке выберите альтернативный метод проверки подлинности.
Методы аутентификации с использованием пользовательских поставщиков токенов
В этом разделе рассматриваются различные методы аутентификации с помощью пользовательского провайдера токенов.
Поставщик пользовательских токенов для авторизации учетных данных федеративной управляемой идентификации.
Пользовательские поставщики токенов могут использоваться для получения токена Microsoft Entra ID для аутентификации. В следующем примере показано, как использовать настраиваемый поставщик маркеров для получения маркера с помощью федеративного управляемого удостоверения. Вы можете изменить код в соответствии с требованиями приложения.
| В следующем примере замените <AuthorityIdId>, <ApplicationId><ManagedIdentityClientId>и <QueryEndpointUri> на собственные значения.
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();
});
Использование аутентификации с помощью Azure TokenCredential
Создайте пользовательского поставщика маркеров, создав класс, который наследует от TokenCredential и реализует метод GetToken. Кроме того, можно использовать существующего поставщика токенов, например DefaultAzureCredential. Этот метод обеспечивает гибкость для различных сценариев аутентификации, когда необходим пользовательский поставщик токенов.
Вы можете использовать DefaultAzureCredential для поддержки рабочего кода, использующего проверку подлинности управляемого удостоверения, или тестирования кода с помощью Visual Studio или Azure CLI.
DefaultAzureCredential можно настроить для использования различных методов проверки подлинности.
В следующем примере замените <QueryEndpointUri> и <ManagedIdentityClientId> на ваши собственные значения.
var credentialProvider = new DefaultAzureCredential(new DefaultAzureCredentialOptions {
ManagedIdentityClientId = <ManagedIdentityClientId>
});
var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
.WithAadAzureTokenCredentialsAuthentication(credentialProvider);
Замечание
DefaultAzureCredential используется для проверки подлинности со службами Azure.
Он пытается получить маркер, используя несколько методов проверки подлинности, и может быть настроен для работы с Управляемой идентификацией, Visual Studio, Azure CLI и т. д.
Эти учетные данные подходят как для тестирования, так и для рабочих сред, так как его можно настроить для использования различных методов проверки подлинности.
Дополнительные сведения см. в разделе Класс DefaultAzureCredential.