Udostępnij za pośrednictwem


Metody uwierzytelniania aplikacji

Dotyczy: ✅Microsoft FabricAzure Data Explorer

Ta dokumentacja zawiera omówienie podstawowych metod uwierzytelniania dostępnych dla bibliotek klienckich usługi Kusto. Podane fragmenty kodu przedstawiają różne podejścia do uwierzytelniania użytkowników i aplikacji, umożliwiając bezproblemową interakcję z klastrami Kusto. Każda metoda jest odpowiednia dla różnych scenariuszy i wymagań.

Jeśli to możliwe, zalecamy używanie tożsamości zarządzanych zamiast nazwy użytkownika i uwierzytelniania haseł lub parametrów połączenia. Tożsamości zarządzane zapewniają bezpieczniejsze i usprawnione podejście do uwierzytelniania.

Z tego artykułu dowiesz się, jak uwierzytelniać się przy użyciu:

Warunki wstępne

Metody uwierzytelniania podmiotu zabezpieczeń aplikacji

W tej sekcji opisano różne metody uwierzytelniania przy użyciu tożsamości aplikacji.

Uwierzytelnianie za pomocą tożsamości zarządzanej

Istnieją dwa typy tożsamości zarządzanych: przypisane przez system i przypisane przez użytkownika. Tożsamości zarządzane przypisane przez system mają swój cykl życia związany z zasobem, który je utworzył. Ta tożsamość jest ograniczona do tylko jednego zasobu. Tożsamości zarządzane przypisane przez użytkownika mogą być używane dla wielu zasobów. Aby uzyskać więcej informacji, zobacz Tożsamości zarządzane.

| W poniższych przykładach zastąp <QueryEndpointUri> i <ManagedIdentityClientId> własnymi wartościami.

  • Tożsamość zarządzana przypisana przez system:

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadSystemManagedIdentity();
    
  • Tożsamość zarządzana przypisana przez użytkownika. Użyj identyfikatora klienta tożsamości lub identyfikatora obiektu w następujący sposób:

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

Ważny

  • Aby uzyskać dostęp do klastra Kusto, należy przypisać rolę obiektowi, czyli jednostce głównej, zasobu tożsamości zarządzanej. Możesz to zrobić w Azure Portal na stronie zasobu klastra Kusto w sekcji Zabezpieczenia + Sieć>Uprawnienia. Zarządzana tożsamość nie powinna być bezpośrednio dołączana do klastra Kusto.
  • Uwierzytelnianie przy użyciu tożsamości zarządzanej nie jest obsługiwane w lokalnych środowiskach programistycznych. Aby przetestować uwierzytelnianie tożsamości zarządzanej, wdróż aplikację na platformie Azure lub użyj innej metody uwierzytelniania podczas pracy lokalnie.

Uwierzytelnianie oparte na certyfikatach

Certyfikaty mogą służyć jako tajne informacje do uwierzytelniania tożsamości aplikacji podczas żądania tokenu. Istnieje kilka metod ładowania certyfikatu, takich jak ładowanie go z lokalnego magazynu poświadczeń maszyny lub z dysku.

| W poniższych przykładach zastąp <QueryEndpointUri>, <ApplicationId>, <CertificateSubjectName>, <CertificateIssuerName>, <CertificateThumbprint>, <CertificateObject>, <AuthorityId>, <PemPublicCertificate>, <PemPrivateKey>, <privateKeyPemFilePath>, <PemCertificatePath>i <EnableSubjectAndIssuerAuth> własnymi wartościami.

  • Certyfikat z lokalnego magazynu certyfikatów maszyny jest obsługiwany tylko przy użyciu języka C#:

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

    Ważny

    W przypadku używania nazwy podmiotu i wystawcy certyfikat musi być zainstalowany w magazynie certyfikatów komputera lokalnego.

  • Certyfikat z dowolnego źródła, takiego jak plik na dysku, pamięć podręczną lub bezpieczny magazyn, taki jak usługa Azure Key Vault. Obiekt certyfikatu musi zawierać klucz prywatny:

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

    Aby uzyskać więcej informacji, zobacz parametry połączenia usługi Kusto.

Ważny

Aby załadować certyfikaty z usługi Azure Key Vault, możesz użyć klienta Azure.Security.KeyVault.Certificates.

Uwierzytelnianie klucza aplikacji

Klucz aplikacji, znany również jako hasło aplikacji, jest ciągiem tajnym używanym przez aplikację do uwierzytelniania i potwierdzenia tożsamości podczas żądania tokenu. Służy jako forma poświadczeń dla aplikacji w celu uzyskania dostępu do chronionych zasobów. Klucz aplikacji jest zwykle generowany i przypisywany przez dostawcę tożsamości lub serwer autoryzacji. Ważne jest, aby bezpiecznie zarządzać kluczem aplikacji i chronić go, aby zapobiec nieautoryzowanemu dostępowi do poufnych informacji lub akcji.

| W poniższych przykładach zastąp <QueryEndpointUri>, <ApplicationId>, <ApplicationKey>, <AuthorityId>i <AuthorityId> własnymi wartościami.

  • Klucz aplikacji:

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadApplicationKeyAuthentication(<ApplicationId>, <ApplicationKey>, <AuthorityId>);
    
  • Ciąg połączenia z kluczem aplikacji:

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

Ważny

Twarde kodowanie sekretów w kodzie jest uznawane za złą praktykę. Przechowywanie poufnych informacji, takich jak poświadczenia uwierzytelniania, w postaci zwykłego tekstu może prowadzić do luk w zabezpieczeniach. Zalecamy przechowywanie poufnych informacji zaszyfrowanych lub przechowywanie ich w bezpiecznym magazynie kluczy. Korzystając z szyfrowania lub magazynu kluczy, możesz mieć pewność, że wpisy tajne są chronione i dostępne tylko dla autoryzowanych użytkowników lub aplikacji.

Metody uwierzytelniania głównego użytkownika

W tej sekcji opisano różne metody uwierzytelniania używając tożsamości użytkownika.

Uwierzytelnianie logowania interakcyjnego użytkownika

Ta metoda uwierzytelniania używa poświadczeń użytkownika do nawiązania bezpiecznego połączenia z usługą Kusto. Metoda otwiera przeglądarkę internetową, w której użytkownik jest monitowany o wprowadzenie nazwy użytkownika i hasła w celu ukończenia procesu uwierzytelniania.

| W poniższych przykładach zastąp <QueryEndpointUri> ,<AuthorityId>i <AuthorityId> własnymi wartościami.

  • Logowanie użytkownika interakcyjnego:

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

Uwierzytelnianie interfejsu azure Command-Line (CLI)

Ta metoda uwierzytelniania używa interfejsu azure Command-Line (CLI) do uwierzytelniania i uzyskiwania tokenu dla użytkownika. Uruchomienie polecenia az login oznacza, że użytkownik może bezpiecznie nawiązać połączenie i pobrać niezbędny token do celów uwierzytelniania. Użytkownik może zostać poproszony o zalogowanie się, jeśli token nie jest dostępny w pamięci podręcznej Azure CLI, a parametr interactive jest ustawiony na true. Aby uzyskać więcej informacji, zobacz Azure CLI Command-Line.

| W poniższym przykładzie zastąp <QueryEndpointUri> własną wartością.

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

Ważny

Ta metoda jest obsługiwana tylko w przypadku aplikacji .NET Framework.

Uwierzytelnianie kodu urządzenia

Ta metoda jest przeznaczona dla urządzeń, które nie mają odpowiedniego interfejsu użytkownika do logowania, takich jak urządzenia IoT i terminale serwera. Udostępnia on użytkownikowi kod i adres URL do uwierzytelniania przy użyciu innego urządzenia, takiego jak smartfon. Ta metoda interaktywna wymaga od użytkownika zalogowania się za pośrednictwem przeglądarki.

| W poniższym przykładzie zastąp <QueryEndpointUri> własną wartością.

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

Ważny

Uwierzytelnianie kodu urządzenia może być blokowane przez zasady dostępu warunkowego najemcy. W takim przypadku wybierz alternatywną metodę uwierzytelniania.

Niestandardowe metody uwierzytelniania dostawcy tokenów

W tej sekcji opisano różne metody uwierzytelniania przy użyciu niestandardowego dostawcy tokenów.

Dostosowany dostawca tokenów dla federacyjnego uwierzytelniania poświadczeń zarządzanej tożsamości.

Niestandardowy dostawca tokenów może być użyty do uzyskania tokenu Microsoft Entra ID na potrzeby uwierzytelnienia. W poniższym przykładzie pokazano, jak uzyskać token za pomocą niestandardowego dostawcy tokenów i tożsamości zarządzanej z użyciem federacji. Kod można zmodyfikować tak, aby odpowiadał wymaganiom aplikacji.

| W poniższym przykładzie zastąp <AuthorityIdId>, <ApplicationId>, <ManagedIdentityClientId>i <QueryEndpointUri> własnymi wartościami.

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

Korzystanie z uwierzytelniania azure TokenCredential

Utwórz niestandardowego dostawcę tokenów, tworząc klasę, która dziedziczy po TokenCredential i implementuje metodę GetToken. Alternatywnie możesz użyć istniejącego dostawcy tokenów, takiego jak DefaultAzureCredential. Ta metoda zapewnia elastyczność dla różnych scenariuszy uwierzytelniania, gdy jest wymagany niestandardowy dostawca tokenów.

Można użyć DefaultAzureCredential do obsługi kodu produkcyjnego korzystającego z uwierzytelniania tożsamości zarządzanej lub testowania kodu przy użyciu programu Visual Studio lub interfejsu wiersza polecenia platformy Azure. DefaultAzureCredential można skonfigurować do używania różnych metod uwierzytelniania.

| W poniższym przykładzie zastąp <QueryEndpointUri> i <ManagedIdentityClientId> własnymi wartościami.

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

Notatka

DefaultAzureCredential służy do uwierzytelniania za pomocą usług platformy Azure. Podejmuje próbę uzyskania tokenu za pomocą wielu metod uwierzytelniania i można ją skonfigurować do pracy z tożsamością zarządzaną, programem Visual Studio, interfejsem wiersza polecenia platformy Azure i nie tylko. To poświadczenie jest odpowiednie zarówno dla środowisk testowych, jak i produkcyjnych, ponieważ można je skonfigurować do używania różnych metod uwierzytelniania. Aby uzyskać więcej informacji, zobacz DefaultAzureCredential Class.

Następny krok