Sdílet prostřednictvím


Metody ověřování aplikací

Platí pro: ✅Microsoft FabricAzure Data Explorer

Tato dokumentace obsahuje přehled primárních metod ověřování dostupných pro klientské knihovny Kusto. Poskytnuté fragmenty kódu ukazují různé přístupy k ověřování uživatelů a aplikací a umožňují bezproblémovou interakci s clustery Kusto. Každá metoda je vhodná pro různé scénáře a požadavky.

Pokud je to možné, doporučujeme místo ověřování uživatelských jmen a hesel nebo připojovacích řetězců používat spravované identity. Spravované identity poskytují bezpečnější a efektivnější přístup k ověřování.

V tomto článku se dozvíte, jak provést ověření pomocí:

Požadavky

Metody ověřování aplikačního hlavního objektu

Tato část popisuje různé metody ověřování pomocí hlavního objektu aplikace.

Ověřování spravované identity

Existují dva typy spravovaných identit: přiřazené systémem a přiřazené uživatelem. Spravované identity přiřazené systémem mají svůj životní cyklus svázaný s prostředkem, který je vytvořil. Tato identita je omezena pouze na jeden prostředek. Spravované identity přiřazené uživatelem je možné použít u více prostředků. Pro více informací si přečtěte o spravovaných identitách.

| V následujících příkladech nahraďte <QueryEndpointUri> a <ManagedIdentityClientId> vlastními hodnotami.

  • Spravovaná identita přiřazená systémem:

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadSystemManagedIdentity();
    
  • Spravovaná identita přiřazená uživatelem ID klienta nebo ID objektu identity použijte následujícím způsobem:

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

Důležitý

  • Id objektu nebo objektu zabezpečení prostředku spravované identity musí být přiřazeno roli pro přístup ke clusteru Kusto. Můžete to udělat na webu Azure Portal na stránce prostředku clusteru Kusto v části Zabezpečení + sítě>Oprávnění. Spravovaná identita by neměla být připojena přímo ke clusteru Kusto.
  • Ověřování spravované identity není podporováno v místních vývojových prostředích. Pokud chcete otestovat ověřování spravované identity, nasaďte aplikaci do Azure nebo při práci místně použijte jinou metodu ověřování.

Ověřování na základě certifikátů

Certifikáty můžou sloužit jako tajné kódy pro ověření identity aplikace při vyžádání tokenu. Existuje několik metod načtení certifikátu, například jeho načtení z místního úložiště přihlašovacích údajů počítače nebo z disku.

| V následujících příkladech nahraďte <QueryEndpointUri>, <ApplicationId>, <CertificateSubjectName>, <CertificateIssuerName>, <CertificateThumbprint>, <CertificateObject>, <AuthorityId>, <PemPublicCertificate>, <PemPrivateKey>, <privateKeyPemFilePath>, <PemCertificatePath>a <EnableSubjectAndIssuerAuth> vlastními hodnotami.

  • Certifikát z místního úložiště certifikátů počítače se podporuje jenom pomocí jazyka C#:

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

    Důležitý

    Při použití názvu subjektu a vystavitele musí být certifikát nainstalován v úložišti certifikátů místního počítače.

  • Certifikát z libovolného zdroje, například souboru na disku, mezipaměti nebo zabezpečeném úložišti, jako je Azure Key Vault. Objekt certifikátu musí obsahovat privátní klíč:

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

    Další informace najdete v tématu připojovací řetězce Kusto.

Důležitý

Pokud chcete načíst certifikáty ze služby Azure Key Vault, můžete použít klienta azure.Security.KeyVault.Certificates.

Ověřování pomocí klíče aplikace

Klíč aplikace, označovaný také jako heslo aplikace, je tajný řetězec, který aplikace používá k ověření a prokázání své identity při vyžádání tokenu. Slouží jako forma přihlašovacích údajů pro aplikaci pro přístup k chráněným prostředkům. Klíč aplikace se obvykle generuje a přiřazuje zprostředkovatelem identity nebo autorizačním serverem. Je důležité bezpečně spravovat a chránit klíč aplikace, aby se zabránilo neoprávněnému přístupu k citlivým informacím nebo akcím.

| V následujících příkladech nahraďte <QueryEndpointUri>, <ApplicationId>, <ApplicationKey>, <AuthorityId>a <AuthorityId> vlastními hodnotami.

  • Klíč aplikace:

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadApplicationKeyAuthentication(<ApplicationId>, <ApplicationKey>, <AuthorityId>);
    
  • Připojovací řetězec s klíčem aplikace:

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

Důležitý

Zakódování tajemství přímo ve vašem kódu je považováno za špatnou praxi. Ukládání citlivých informací, jako jsou přihlašovací údaje pro ověřování, ve formátu prostého textu může vést k ohrožení zabezpečení. Doporučujeme, abyste citlivé informace zašifrovali nebo bezpečně ukládali do trezoru klíčů. Pomocí šifrování nebo trezoru klíčů můžete zajistit, aby vaše tajné kódy byly chráněné a přístupné jenom autorizovaným uživatelům nebo aplikacím.

Metody ověřování uživatelského principu

Tato část popisuje různé metody ověřování pomocí uživatelského principálu.

Interaktivní ověřování přihlašování uživatelů

Tato metoda ověřování používá přihlašovací údaje uživatele k navázání zabezpečeného připojení k Kusto. Metoda otevře webový prohlížeč, ve kterém se uživateli zobrazí výzva k zadání uživatelského jména a hesla k dokončení procesu ověřování.

| V následujících příkladech nahraďte <QueryEndpointUri> ,<AuthorityId>a <AuthorityId> vlastními hodnotami.

  • Interaktivní přihlášení uživatele:

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

Ověřování rozhraní azure Command-Line (CLI)

Tato metoda ověřování používá rozhraní Azure Command-Line (CLI) k ověření a získání tokenu pro uživatele. Spuštění příkazu az login znamená, že uživatel může bezpečně navázat připojení a načíst potřebný token pro účely ověřování. Pokud token není k dispozici v mezipaměti Azure CLI, může se zobrazit výzva k přihlášení a parametr interactive je nastavený na true. Další informace najdete v tématu Azure Command-Line rozhraní příkazového řádku (CLI).

| V následujícím příkladu nahraďte <QueryEndpointUri> vlastní hodnotou.

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

Důležitý

Tato metoda je podporována pouze pro aplikace rozhraní .NET Framework.

Ověřování kódu zařízení

Tato metoda je určená pro zařízení, která nemají správné uživatelské rozhraní pro přihlašování, jako jsou zařízení IoT a serverové terminály. Poskytuje uživateli kód a adresu URL pro ověření pomocí jiného zařízení, například smartphonu. Tato interaktivní metoda vyžaduje, aby se uživatel přihlásil přes prohlížeč.

| V následujícím příkladu nahraďte <QueryEndpointUri> vlastní hodnotou.

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

Důležitý

Ověřování kódu zařízení může být zablokováno zásadami podmíněného přístupu tenanta. Pokud k tomu dojde, vyberte alternativní metodu ověřování.

Metody ověřování poskytovatele vlastních tokenů

Tato část popisuje různé metody ověřování pomocí vlastního zprostředkovatele tokenu.

Vlastní zprostředkovatel tokenů pro ověřování přihlašovacích údajů řízené federované identity

Vlastní zprostředkovatele tokenů je možné použít k získání tokenu MICROSOFT Entra ID pro ověřování. Následující příklad ukazuje použití vlastního zprostředkovatele tokenu k získání tokenu pomocí federované spravované identity. Kód můžete upravit tak, aby vyhovoval požadavkům vaší aplikace.

| V následujícím příkladu nahraďte <AuthorityIdId>, <ApplicationId>, <ManagedIdentityClientId>a <QueryEndpointUri> vlastními hodnotami.

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

Použití ověřování Azure TokenCredential

Vytvořte vlastního zprostředkovatele tokenu vytvořením třídy, která dědí z TokenCredential a implementuje GetToken metodu. Alternativně můžete použít existujícího zprostředkovatele tokenů, jako je DefaultAzureCredential. Tato metoda poskytuje flexibilitu pro různé scénáře ověřování v případě, že je vyžadován vlastní poskytovatel tokenu.

K podpoře produkčního kódu, který používá ověřování spravované identity, nebo testování kódu pomocí sady Visual Studio nebo Azure CLI můžete použít DefaultAzureCredential. DefaultAzureCredential lze nakonfigurovat tak, aby používaly různé metody ověřování.

| V následujícím příkladu nahraďte <QueryEndpointUri> a <ManagedIdentityClientId> vlastními hodnotami.

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

Poznámka

DefaultAzureCredential slouží k ověřování pomocí služeb Azure. Pokouší se získat token několika metodami ověřování a dá se nakonfigurovat tak, aby fungovala se spravovanou identitou, sadou Visual Studio, Azure CLI a dalšími způsoby. Tyto přihlašovací údaje jsou vhodné pro testovací i produkční prostředí, protože je možné je nastavit tak, aby používaly různé metody ověřování. Další informace naleznete v tématu Třída DefaultAzureCredential.

Další krok