Partilhar via


Métodos de autenticação de aplicativos

Aplica-se a: ✅Microsoft FabricAzure Data Explorer

Esta documentação fornece uma visão geral dos principais métodos de autenticação disponíveis para as bibliotecas de cliente Kusto. Os trechos de código fornecidos demonstram diferentes abordagens para autenticar usuários e aplicativos, permitindo uma interação perfeita com clusters Kusto. Cada método é adequado para diferentes cenários e requisitos.

Sempre que possível, recomendamos o uso de identidades gerenciadas em vez de autenticação de nome de usuário e senha ou cadeias de conexão. As identidades gerenciadas fornecem uma abordagem mais segura e simplificada para a autenticação.

Neste artigo, você aprenderá a autenticar usando:

Pré-requisitos

Métodos de autenticação do Principal de Aplicação

Esta seção aborda os diferentes métodos de autenticação usando um principal da aplicação.

Autenticação de identidade gerenciada

Existem dois tipos de identidades gerenciadas: atribuídas pelo sistema e atribuídas pelo usuário. As identidades gerenciadas atribuídas ao sistema têm seu ciclo de vida vinculado ao recurso que as criou. Essa identidade é restrita a apenas um recurso. As identidades gerenciadas atribuídas pelo usuário podem ser usadas em vários recursos. Para obter mais informações, consulte Managed Identities.

| Nos exemplos a seguir, substitua <QueryEndpointUri> e <ManagedIdentityClientId> por seus próprios valores.

  • Identidade gerenciada atribuída ao sistema:

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadSystemManagedIdentity();
    
  • Identidade gerenciada atribuída pelo usuário. Use o ID do cliente de identidade ou o ID do objeto, da seguinte maneira:

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadUserManagedIdentity(<ManagedIdentityClientId>);
    

Importante

  • O objeto, ou principal, ID do recurso Identidade Gerenciada deve receber uma função para acessar o cluster Kusto. Você pode fazer isso no portal do Azure, na página de recursos do seu cluster Kusto em Segurança + rede>Permissões. A Identidade Gerenciada não deve ser anexada diretamente ao cluster Kusto.
  • A autenticação de Identidade Gerenciada não é suportada em ambientes de desenvolvimento local. Para testar a autenticação de Identidade Gerenciada, implante o aplicativo no Azure ou use um método de autenticação diferente ao trabalhar localmente.

Autenticação baseada em certificado

Os certificados podem servir como segredos para autenticar a identidade de um aplicativo ao solicitar um token. Há vários métodos para carregar o certificado, como carregá-lo do armazenamento de credenciais local da máquina ou do disco.

| Nos exemplos a seguir, substitua <QueryEndpointUri>, <ApplicationId>, <CertificateSubjectName>, <CertificateIssuerName>, <CertificateThumbprint>, <CertificateObject>, <AuthorityId>, <PemPublicCertificate>, <PemPrivateKey>, <privateKeyPemFilePath>, <PemCertificatePath>e <EnableSubjectAndIssuerAuth> com seus próprios valores.

  • O certificado do armazenamento local da máquina é suportado apenas usando C#:

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadApplicationSubjectAndIssuerAuthentication(<ApplicationId>, <CertificateSubjectName>, <CertificateIssuerName>, <AuthorityId>);
    

    Importante

    Quando se utiliza o nome da entidade e o emissor, o certificado deve ser instalado no armazenamento de certificados da máquina local.

  • Certificado de uma fonte arbitrária, como um arquivo em disco, cache ou armazenamento seguro, como o Azure Key Vault. O objeto de certificado deve conter uma chave privada:

    X509Certificate2 certificate = <CertificateObject>;
    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadApplicationCertificateAuthentication(<ApplicationId>, certificate, <AuthorityId>);
    

    Para obter mais informações, consulte cadeias de conexão Kusto.

Importante

Para carregar certificados do Cofre de Chaves do Azure, você pode usar o Azure.Security.KeyVault.Certificatescliente.

Autenticação de chave de aplicativo

A chave do aplicativo, também conhecida como senha do aplicativo, é uma cadeia de caracteres secreta que um aplicativo usa para autenticar e provar sua identidade ao solicitar um token. Ele serve como uma forma de credencial para o aplicativo acessar recursos protegidos. A chave do aplicativo normalmente é gerada e atribuída pelo provedor de identidade ou servidor de autorização. É importante gerenciar e proteger com segurança a chave do aplicativo para evitar o acesso não autorizado a informações ou ações confidenciais.

| Nos exemplos a seguir, substitua <QueryEndpointUri>, <ApplicationId>, <ApplicationKey>, <AuthorityId>e <AuthorityId> por seus próprios valores.

  • Chave de aplicação:

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadApplicationKeyAuthentication(<ApplicationId>, <ApplicationKey>, <AuthorityId>);
    
  • Cadeia de conexão com chave do aplicativo:

    var connectionString = "Data Source=<QueryEndpointUri>;Initial Catalog=NetDefaultDB;AAD Federated Security=True;AppClientId=<ApplicationId>;AppKey=<ApplicationKey>;Authority Id=<AuthorityId>;"
    var kcsb = new KustoConnectionStringBuilder(connectionString);
    

Importante

Codificação de segredos no seu código é considerada uma má prática. O armazenamento de informações confidenciais, como credenciais de autenticação, em texto sem formatação pode levar a vulnerabilidades de segurança. Recomendamos que você mantenha as informações confidenciais criptografadas ou armazene-as com segurança em um cofre de chaves. Usando criptografia ou um cofre de chaves, você pode garantir que seus segredos estejam protegidos e acessíveis apenas a usuários ou aplicativos autorizados.

Métodos de autenticação do Principal de Utilizador

Esta seção aborda os diferentes métodos de autenticação usando um principal de usuário.

Autenticação interativa de entrada do usuário

Este método de autenticação usa as credenciais do usuário para estabelecer uma conexão segura com o Kusto. O método abre um navegador da Web onde o usuário é solicitado a inserir seu nome de usuário e senha para concluir o processo de autenticação.

| Nos exemplos a seguir, substitua <QueryEndpointUri> ,<AuthorityId>e <AuthorityId> por seus próprios valores.

  • Login de usuário interativo:

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadUserPromptAuthentication();
    

Autenticação da Interface Command-Line do Azure (CLI)

Esse método de autenticação usa a CLI (Interface de Command-Line do Azure) para autenticar e obter um token para o usuário. Executar o comando az login significa que o usuário pode estabelecer uma conexão com segurança e recuperar o token necessário para fins de autenticação. O usuário pode ser solicitado a entrar se o token não estiver disponível no cache da CLI do Azure e o parâmetro interactive estiver definido como true. Para obter mais informações, consulte Azure Command-Line Interface (CLI).

| No exemplo a seguir, substitua <QueryEndpointUri> pelo seu próprio valor.

var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
  .WithAadAzCliAuthentication(interactive: true);

Importante

Esse método só é suportado para aplicativos .NET Framework.

Autenticação de código de dispositivo

Este método foi concebido para dispositivos sem uma interface de utilizador adequada para início de sessão, tais como dispositivos IoT e terminais de servidor. Ele fornece ao usuário um código e uma URL para autenticar usando um dispositivo diferente, como um smartphone. Este método interativo requer que o utilizador inicie sessão através de um browser.

| No exemplo a seguir, substitua <QueryEndpointUri> pelo seu próprio valor.

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;
  });

Importante

A autenticação do código do dispositivo pode ser bloqueada pelas Políticas de Acesso Condicional do locatário. Se isso ocorrer, selecione um método de autenticação alternativo.

Métodos de autenticação do provedor de token personalizado

Esta seção aborda os diferentes métodos de autenticação usando um provedor de token personalizado.

Provedor de token personalizado para autenticação de credenciais de Identidade Gerenciada federada

Os provedores de token personalizados podem ser usados para adquirir um token de ID do Microsoft Entra para autenticação. O exemplo a seguir demonstra como usar um provedor de token personalizado para obter um token usando identidade gerenciada federada. Você pode modificar o código para atender aos requisitos do seu aplicativo.

| No exemplo a seguir, substitua <AuthorityIdId>, <ApplicationId>, <ManagedIdentityClientId>e <QueryEndpointUri> por seus próprios valores.

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();
    });

Usando a autenticação TokenCredential do Azure

Crie um provedor de token personalizado criando uma classe que herda de TokenCredential e implemente o método GetToken. Como alternativa, você pode usar um provedor de token existente como DefaultAzureCredential. Esse método fornece flexibilidade para diferentes cenários de autenticação quando um provedor de token personalizado é necessário.

Você pode usar DefaultAzureCredential para dar suporte ao código de produção que usa a autenticação de Identidade Gerenciada ou testar o código usando o Visual Studio ou a CLI do Azure. DefaultAzureCredential pode ser configurado para usar diferentes métodos de autenticação.

| No exemplo a seguir, substitua <QueryEndpointUri> e <ManagedIdentityClientId> por seus próprios valores.

var credentialProvider = new DefaultAzureCredential(new DefaultAzureCredentialOptions {
  ManagedIdentityClientId = <ManagedIdentityClientId>
 });
var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
  .WithAadAzureTokenCredentialsAuthentication(credentialProvider);

Observação

DefaultAzureCredential é usado para autenticar com os serviços do Azure. Ele tenta vários métodos de autenticação para obter um token e pode ser configurado para trabalhar com Identidade Gerenciada, Visual Studio, CLI do Azure e muito mais. Essa credencial é adequada para ambientes de teste e produção, pois pode ser configurada para usar diferentes métodos de autenticação. Para obter mais informações, consulte DefaultAzureCredential Class.

Próximo passo