Freigeben über


App-Authentifizierungsmethoden

Gilt für: ✅Microsoft FabricAzure Data Explorer

Dieser Artikel enthält eine Übersicht über die primären Authentifizierungsmethoden, die für die Kusto-Clientbibliotheken verfügbar sind. Die Codeausschnitte zeigen verschiedene Möglichkeiten zum Authentifizieren von Benutzern und Apps, wodurch eine nahtlose Interaktion mit Kusto-Clustern ermöglicht wird. Jede Methode passt zu verschiedenen Szenarien und Anforderungen.

Verwenden Sie verwaltete Identitäten anstelle der Benutzernamen- und Kennwortauthentifizierung oder Verbindungszeichenfolgen, wenn möglich. Verwaltete Identitäten bieten einen sichereren und optimierten Ansatz für die Authentifizierung.

In diesem Artikel erfahren Sie, wie Sie mithilfe der folgenden Ressourcen eine Authentifizierung durchführen:

Anwendungsprinzipal

Authentifizierung der verwalteten Identität

Benutzerprinzipal

Benutzerdefinierter Tokenanbieter

Voraussetzungen

Methoden für die Anwendungsprinzipalauthentifizierung

In diesem Abschnitt werden die verschiedenen Methoden der Authentifizierung mithilfe eines Anwendungs-Principals behandelt.

Authentifizierung der verwalteten Identität

Es gibt zwei Arten von verwalteten Identitäten: systemzugewiesen und benutzerzugewiesen. Vom System zugewiesene verwaltete Identitäten haben ihren Lebenszyklus an die Ressource gebunden, die sie erstellt. Diese Identität ist auf eine Ressource beschränkt. Von Benutzern zugewiesene verwaltete Identitäten können für mehrere Ressourcen verwendet werden. Weitere Informationen finden Sie unter Verwaltete Identitäten.

Ersetzen Sie in den folgenden Beispielen <QueryEndpointUri> und <ManagedIdentityClientId> durch Ihre Werte.

  • Systemseitig zugewiesene verwaltete Identität:

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadSystemManagedIdentity();
    
  • Vom Benutzer zugewiesene verwaltete Identität. Verwenden Sie die Identitätsclient-ID oder -objekt-ID wie folgt:

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

Wichtig

  • Dem Objekt oder der Prinzipal-ID der verwalteten Identitätsressource muss eine Rolle zugewiesen werden, um auf den Kusto-Cluster zuzugreifen. Sie können eine Rolle im Azure-Portal auf Ihrer Kusto-Clusterressourcenseite unter "Sicherheit +>" zuweisen. Verwaltete Identität sollte nicht direkt an den Kusto-Cluster angefügt werden.
  • Die verwaltete Identitätsauthentifizierung wird in lokalen Entwicklungsumgebungen nicht unterstützt. Um die Verwaltete Identitätsauthentifizierung zu testen, stellen Sie die Anwendung in Azure bereit, oder verwenden Sie beim lokalen Arbeiten eine andere Authentifizierungsmethode.

Zertifikatbasierte Authentifizierung

Zertifikate dienen als geheime Schlüssel, um die Identität einer Anwendung beim Anfordern eines Tokens zu authentifizieren. Es gibt mehrere Methoden zum Laden des Zertifikats, z. B. das Laden des Zertifikats aus dem lokalen Anmeldeinformationsspeicher des Computers oder vom Datenträger.

| Ersetzen Sie in den folgenden Beispielen <QueryEndpointUri>, <ApplicationId>, <CertificateSubjectName>, <CertificateIssuerName>, <CertificateThumbprint>, <CertificateObject>, <AuthorityId>, <PemPublicCertificate>, <PemPrivateKey>, <privateKeyPemFilePath>, <PemCertificatePath>und <EnableSubjectAndIssuerAuth> mit Ihren eigenen Werten.

  • Das Zertifikat aus dem lokalen Zertifikatspeicher des Computers wird nur mit C# unterstützt:

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

    Wichtig

    Wenn Sie Betreffname und Aussteller verwenden, muss das Zertifikat im Zertifikatsspeicher des lokalen Computers installiert sein.

  • Zertifikat aus einer beliebigen Quelle, z. B. datei auf Datenträger, Cache oder sicherem Speicher wie Azure Key Vault. Das Zertifikatobjekt muss einen privaten Schlüssel enthalten:

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

    Weitere Informationen finden Sie unter Kusto-Verbindungszeichenfolgen.

Wichtig

Um Zertifikate aus Azure Key Vault zu laden, können Sie den Azure.Security.KeyVault.Certificatesclientverwenden.

Anwendungsschlüssel-Authentifizierung

Der Anwendungsschlüssel, auch als Anwendungskennwort bezeichnet, ist eine geheime Zeichenfolge, die von einer Anwendung verwendet wird, um ihre Identität beim Anfordern eines Tokens zu authentifizieren und zu beweisen. Sie dient als Anmeldeinformation, damit eine Anwendung auf geschützte Ressourcen zugreifen kann. Der Anwendungsschlüssel wird in der Regel vom Identitätsanbieter oder Autorisierungsserver generiert und zugewiesen. Es ist wichtig, den Anwendungsschlüssel sicher zu verwalten und zu schützen, um nicht autorisierten Zugriff auf vertrauliche Informationen oder Aktionen zu verhindern.

| Ersetzen Sie in den folgenden Beispielen <QueryEndpointUri>, <ApplicationId>, <ApplicationKey>, <AuthorityId>und <AuthorityId> durch Ihre eigenen Werte.

  • Anwendungsschlüssel:

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadApplicationKeyAuthentication(<ApplicationId>, <ApplicationKey>, <AuthorityId>);
    
  • Verbindungszeichenfolge mit Anwendungsschlüssel:

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

Wichtig

Das hartcodieren von Geheimnissen im Code ist eine schlechte Praxis. Das Speichern vertraulicher Informationen, z. B. Authentifizierungsanmeldeinformationen, in Nur-Text führt zu Sicherheitsrisiken. Bewahren Sie vertrauliche Informationen verschlüsselt auf, oder speichern Sie sie sicher in einem Schlüsseltresor. Die Verwendung von Verschlüsselung oder einem Schlüsseltresor stellt sicher, dass Ihre geheimen Schlüssel geschützt und nur für autorisierte Benutzer oder Anwendungen zugänglich sind.

Authentifizierungmethoden mit Benutzerprinzipal

In diesem Abschnitt werden die verschiedenen Methoden der Authentifizierung mithilfe eines Benutzerprinzipals behandelt.

Interaktive Benutzeranmeldungsauthentifizierung

Diese Authentifizierungsmethode verwendet die Anmeldeinformationen des Benutzers, um eine sichere Verbindung mit Kusto herzustellen. Die Methode öffnet einen Webbrowser, in dem der Benutzer aufgefordert wird, seinen Benutzernamen und sein Kennwort einzugeben, um den Authentifizierungsprozess abzuschließen.

| Ersetzen Sie in den folgenden Beispielen <QueryEndpointUri> ,<AuthorityId>und <AuthorityId> durch Ihre eigenen Werte.

  • Interaktive Benutzeranmeldung:

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

Azure Command-Line Interface (CLI)-Authentifizierung

Diese Authentifizierungsmethode verwendet die Azure Command-Line-Schnittstelle (CLI), um den Benutzer zu authentifizieren und ein Token zu erhalten. Das Ausführen des befehls az login bedeutet, dass der Benutzer sicher eine Verbindung herstellen und das erforderliche Token für Authentifizierungszwecke abrufen kann. Der Benutzer wird möglicherweise aufgefordert, sich anzumelden, wenn das Token im Azure CLI-Cache nicht verfügbar ist und der parameter interactive auf truefestgelegt ist. Weitere Informationen finden Sie unter Azure-Befehlszeilenschnittstelle (CLI).

| Ersetzen Sie im folgenden Beispiel <QueryEndpointUri> durch Ihren eigenen Wert.

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

Wichtig

Diese Methode wird nur für .NET Framework-Apps unterstützt.

Gerätecodeauthentifizierung

Diese Methode wurde für Geräte entwickelt, auf der keine ordnungsgemäße Benutzeroberfläche für die Anmeldung vorhanden ist, z. B. IoT-Geräte und Serverterminals. Er stellt dem Benutzer einen Code und eine URL zur Authentifizierung mit einem anderen Gerät, z. B. einem Smartphone, zur Verfügung. Für diese interaktive Methode muss sich der Benutzer über einen Browser anmelden.

| Ersetzen Sie im folgenden Beispiel <QueryEndpointUri> durch Ihren eigenen Wert.

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

Wichtig

Mandantenrichtlinien für bedingten Zugriff können die Gerätecodeauthentifizierung blockieren. Wenn dies blockiert ist, wählen Sie eine alternative Authentifizierungsmethode aus.

Authentifizierungsmethoden mit Anbieter benutzerdefinierter Token

In diesem Abschnitt werden die verschiedenen Methoden der Authentifizierung mithilfe eines benutzerdefinierten Tokenanbieters behandelt.

Anbieter benutzerdefinierter Token für die Authentifizierung mit Anmeldeinformationen verwalteter Partneridentitäten

Anbieter benutzerdefinierter Token können verwendet werden, um ein Microsoft Entra ID-Token für die Authentifizierung zu erhalten. Im folgenden Beispiel wird veranschaulicht, wie Sie einen benutzerdefinierten Tokenanbieter verwenden, um ein Token mithilfe der verwalteten Verbundidentität abzurufen. Sie können den Code so ändern, dass er den Anforderungen Ihrer Anwendung entspricht.

| Ersetzen Sie im folgenden Beispiel <AuthorityIdId>, <ApplicationId>, <ManagedIdentityClientId>und <QueryEndpointUri> durch Ihre eigenen Werte.

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

Verwenden der Azure TokenCredential-Authentifizierung

Erstellen Sie einen benutzerdefinierten Tokenanbieter, indem Sie eine Klasse erstellen, die von TokenCredential erbt und die GetToken-Methode implementiert. Alternativ können Sie einen vorhandenen Tokenanbieter wie DefaultAzureCredentialverwenden. Diese Methode bietet Flexibilität für verschiedene Authentifizierungsszenarien, wenn ein benutzerdefinierter Tokenanbieter erforderlich ist.

Sie können DefaultAzureCredential verwenden, um Produktionscode zu unterstützen, der die Verwaltete Identitätsauthentifizierung verwendet, oder Testcode mit Visual Studio oder Azure CLI. DefaultAzureCredential können für die Verwendung verschiedener Authentifizierungsmethoden konfiguriert werden.

| Ersetzen Sie im folgenden Beispiel <QueryEndpointUri> und <ManagedIdentityClientId> durch Ihre eigenen Werte.

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

Anmerkung

DefaultAzureCredential wird verwendet, um sich bei Azure-Diensten zu authentifizieren. Es versucht mehrere Authentifizierungsmethoden, um ein Token abzurufen und kann so konfiguriert werden, dass es mit verwalteter Identität, Visual Studio, Azure CLI und mehr funktioniert. Diese Anmeldeinformationen eignen sich sowohl für Test- als auch für Produktionsumgebungen, da sie für die Verwendung verschiedener Authentifizierungsmethoden eingerichtet werden können. Weitere Informationen hierzu finden Sie in der Dokumentation unter DefaultAzureCredential-Klasse.

Nächster Schritt