Aracılığıyla paylaş


Uygulamalarda Microsoft Authentication Library (MSAL) ile kimlik doğrulaması

Kümenizle program aracılığıyla kimlik doğrulaması yapmak için Azure Veri Gezgini'a özgü Microsoft Entra Kimliği'nden erişim belirteci istemeniz gerekir. Bu erişim belirteci, kümenize istekler oluştururken kimlik kanıtı işlevi görür. Erişim belirteci oluşturmak için Microsoft Kimlik Doğrulama Kitaplığı (MSAL) akışlarından birini kullanabilirsiniz.

Bu makalede, kümenizde sorumluların kimliğini doğrulamak için MSAL'nin nasıl kullanılacağı açıklanmaktadır. Sorumluların kimliğini doğrulamak için MSAL'nin doğrudan kullanımı öncelikli olarak, Adına (OBO) kimlik doğrulaması veya Tek Sayfalı Uygulama (SPA) kimlik doğrulaması gerektiren web uygulamalarında geçerlidir. Diğer durumlarda, kimlik doğrulama işlemini basitleştirdikleri için Kusto istemci kitaplıklarını kullanmanızı öneririz.

Bu makalede ana kimlik doğrulama senaryoları, başarılı kimlik doğrulaması için sağlayabilecek bilgiler ve kimlik doğrulaması için MSAL kullanımı hakkında bilgi edinin.

Kimlik doğrulama senaryoları

Ana kimlik doğrulama senaryoları aşağıdaki gibidir:

  • Kullanıcı kimlik doğrulaması: İnsan kullanıcıların kimliğini doğrulamak için kullanılır.

  • Uygulama kimlik doğrulaması: Yapılandırılmış kimlik bilgilerini kullanarak insan müdahalesi olmadan kaynaklara erişmesi gereken bir uygulamanın kimliğini doğrulamak için kullanılır.

  • Adına (OBO) kimlik doğrulaması: Bir uygulamanın kusto hizmetine erişmek için belirteçle ilgili uygulama için belirteç değiştirmesine izin verir. Bu akış MSAL ile uygulanmalıdır.

  • Tek sayfalı uygulama (SPA) kimlik doğrulaması: İstemci tarafı SPA web uygulamalarının kullanıcıları oturum açmasına ve kümenize erişmek için belirteçler almasına izin verir. Bu akış MSAL ile uygulanmalıdır.

Kullanıcı ve uygulama kimlik doğrulaması için Kusto istemci kitaplıklarını kullanmanızı öneririz. OBO ve SPA kimlik doğrulaması için Kusto istemci kitaplıkları kullanılamaz.

Kimlik doğrulama parametreleri

Belirteç alma işlemi sırasında istemcinin aşağıdaki parametreleri sağlaması gerekir:

Parametre adı Açıklama
Kaynak Kimliği Microsoft Entra erişim belirtecinin verildiği kaynak kimliği. Kaynak kimliği, bağlantı noktası bilgisi ve yolu olmayan küme URI'sidir.

Örnek: Kümenin help kaynak kimliği şeklindedir https://help.kusto.windows.net.
Microsoft Entra kiracı kimliği Microsoft Entra Id çok kiracılı bir hizmettir ve her kuruluş, kullanıcı hesapları ve uygulamalar gibi güvenlikle ilgili nesneleri barındıran dizin adı verilen bir nesne oluşturabilir. Microsoft Entra Id genellikle dizine kiracı olarak başvurur. Her kiracının GUID biçiminde bir kiracı kimliği vardır. Çoğu durumda, kuruluşun etki alanı adı Microsoft Entra kiracısını tanımlamak için de kullanılabilir.

Örnek: "Contoso" kuruluşunun kiracı kimliği 12345678-a123-4567-b890-123a456b789c ve etki alanı adı contoso.comolabilir.
Microsoft Entra yetkilisi URI'si Kimlik doğrulaması için kullanılan uç nokta. Microsoft Entra dizini veya kiracısı, Microsoft Entra yetkilisi URI'sini belirler. URI, https://login.microsoftonline.com/{tenantId} kiracı kimliği veya etki alanı adıdır {tenantId} .

Örnek: Örneğin, https://login.microsoftonline.com/12345678-a123-4567-b890-123a456b789c.

Not

Microsoft Entra hizmet uç noktası ulusal bulutlarda değişir. Ulusal bulutta dağıtılan bir Azure Veri Gezgini hizmetiyle çalışırken ilgili ulusal bulut Microsoft Entra hizmet uç noktasını ayarlayın.

MSAL ile kullanıcı kimlik doğrulaması gerçekleştirme

Aşağıdaki kod örneği, kümeniz için yetkilendirme belirteci almak için MSAL'nin nasıl kullanılacağını gösterir. Yetkilendirme, etkileşimli oturum açma kullanıcı arabirimini başlatan bir şekilde yapılır. appRedirectUri, kimlik doğrulaması başarıyla tamamlandıktan sonra Microsoft Entra Id'nin yeniden yönlendirildiği URL'dir. MSAL, yetkilendirme kodunu bu yeniden yönlendirmeden ayıklar.

var kustoUri = "https://<clusterName>.<region>.kusto.windows.net";

var authClient = PublicClientApplicationBuilder.Create("<appId>")
    .WithAuthority($"https://login.microsoftonline.com/<appTenant>")
    .WithRedirectUri("<appRedirectUri>")
    .Build();

var result = authClient.AcquireTokenInteractive(
    new[] { $"{kustoUri}/.default" } // Define scopes for accessing Azure Data Explorer cluster
).ExecuteAsync().Result;

var bearerToken = result.AccessToken;

var request = WebRequest.Create(new Uri(kustoUri));
request.Headers.Set(HttpRequestHeader.Authorization, string.Format(CultureInfo.InvariantCulture, "{0} {1}", "Bearer", bearerToken));

Not

  • Mümkün olduğunda Kusto istemci kitaplıklarını kullanmanızı öneririz. Bu kitaplıklar, Kusto bağlantı dizesi kimlik doğrulama özellikleri sağlamanıza olanak tanıyarak kimlik doğrulama işlemini basitleştirir.
  • Kusto istemci kitaplıklarıyla Microsoft Entra belirteçleri, kimlik bilgilerinin istenmesi sayısını azaltmak için kullanıcının makinesindeki yerel belirteç önbelleğinde depolanır. Önbellek dosyası %APPDATA%\Kusto\userTokenCache.data şeklindedir ve yalnızca oturum açmış kullanıcı tarafından erişilebilir.

MSAL ile uygulama kimlik doğrulaması gerçekleştirme

Aşağıdaki kod örneği, kümeniz için yetkilendirme belirteci almak için MSAL'nin nasıl kullanılacağını gösterir. Bu akışta istem sunulmaz. Uygulamanın Microsoft Entra Id ile kayıtlı olması ve Microsoft Entra Id tarafından verilen bir uygulama anahtarı veya X509v2 sertifikasına sahip olması gerekir. Uygulama ayarlamak için bkz . Microsoft Entra uygulaması sağlama.

var kustoUri = "https://<clusterName>.<region>.kusto.windows.net";

var authClient = ConfidentialClientApplicationBuilder.Create("<appId>")
    .WithAuthority($"https://login.microsoftonline.com/<appTenant>")
    .WithClientSecret("<appKey>") // Can be replaced by .WithCertificate to authenticate with an X.509 certificate
    .Build();

var result = authClient.AcquireTokenForClient(
    new[] { $"{kustoUri}/.default" } // Define scopes for accessing Azure Data Explorer cluster
).ExecuteAsync().Result;
var bearerToken = result.AccessToken;

var request = WebRequest.Create(new Uri(kustoUri));
request.Headers.Set(HttpRequestHeader.Authorization, string.Format(CultureInfo.InvariantCulture, "{0} {1}", "Bearer", bearerToken));

Not

Mümkün olduğunda Kusto istemci kitaplıklarını kullanmanızı öneririz. Bu kitaplıklar, Kusto bağlantı dizesi kimlik doğrulama özellikleri sağlamanıza olanak tanıyarak kimlik doğrulama işlemini basitleştirir.

Adına (OBO) kimlik doğrulaması gerçekleştirme

Web uygulamanız veya hizmetiniz, kullanıcı veya uygulama ile kümeniz arasında bir aracı olarak hareket ettiğinde, adına kimlik doğrulaması ilgili olur.

Bu senaryoda, bir uygulamaya rastgele bir kaynak için Microsoft Entra erişim belirteci gönderilir. Ardından uygulama bu belirteci kullanarak Azure Veri Gezgini kaynağı için yeni bir Microsoft Entra erişim belirteci alır. Ardından uygulama, özgün Microsoft Entra erişim belirteci tarafından belirtilen sorumlu adına kümenize erişebilir. Bu akış, kimlik doğrulama akışı adına OAuth 2.0 olarak adlandırılır. Genellikle Microsoft Entra Id ile birden çok yapılandırma adımı gerektirir ve bazı durumlarda Microsoft Entra kiracısının yöneticisinin özel onayı gerekebilir.

Adına kimlik doğrulaması gerçekleştirmek için:

  1. Microsoft Entra uygulaması sağlama.

  2. Uygulama ile kümeniz arasında bir güven ilişkisi oluşturun. Bunu yapmak için Temsilci izinlerini yapılandırma makalesindeki adımları izleyin.

  3. Sunucu kodunuzda belirteç değişimini gerçekleştirmek için MSAL kullanın.

    var kustoUri = "https://<clusterName>.<region>.kusto.windows.net";
    
    var authClient = ConfidentialClientApplicationBuilder.Create("<appId>")
        .WithAuthority($"https://login.microsoftonline.com/<appTenant>")
        .WithClientSecret("<appKey>") // Can be replaced by .WithCertificate to authenticate with an X.509 certificate
        .Build();
    
    var result = authClient.AcquireTokenOnBehalfOf(
        new[] { $"{kustoUri}/.default" }, // Define scopes for accessing your cluster
        new UserAssertion("<userAccessToken>") // Encode the "original" token that will be used for exchange
    ).ExecuteAsync().Result;
    var accessTokenForAdx = result.AccessToken;
    
  4. Sorguları çalıştırmak için belirteci kullanın. Örneğin:

    var request = WebRequest.Create(new Uri(kustoUri));
    request.Headers.Set(HttpRequestHeader.Authorization, string.Format(CultureInfo.InvariantCulture, "{0} {1}", "Bearer", accessTokenForAdx));
    

Tek Sayfalı Uygulama (SPA) kimlik doğrulaması gerçekleştirme

SPA web istemcisi kimlik doğrulaması için OAuth yetkilendirme kodu akışını kullanın.

Bu senaryoda, uygulama Microsoft Entra Id'de oturum açmak için yeniden yönlendirilir. Ardından Microsoft Entra Id, URI'de bir yetkilendirme koduyla uygulamaya geri yönlendirir. Ardından uygulama, erişim belirtecini almak için belirteç uç noktasına bir istekte bulunur. Belirteç, istemcinin belirteci sessizce alarak yeniden kullanabildiği 24 saat boyunca geçerlidir.

Microsoft kimlik platformu gibi farklı kullanım örnekleri için ayrıntılı öğreticiler vardır:React, Angular ve JavaScript.

Bir web istemcisi için kimlik doğrulamasını ayarlamak için:

  1. Microsoft Entra uygulaması sağlama.

  2. Uygulamayı MSAL.js 2.0'da kimlik doğrulama kodu akışıyla açıklandığı gibi yapılandırın.

  3. MSAL.js 2.0 kitaplığını kullanarak bir kullanıcıda oturum açın ve kümenizde kimlik doğrulaması uygulayın. Microsoft kimlik platformu gibi farklı kullanım örnekleri için ayrıntılı öğreticiler vardır:React, Angular ve JavaScript.

    Aşağıdaki örnek, Azure Veri Gezgini erişmek için MSAL.js kitaplığını kullanır.

    import * as msal from "@azure/msal-browser";
    
    const msalConfig = {
      auth: {
        clientId: "<AAD client application ID>",
        authority: "https://login.microsoftonline.com/<AAD tenant ID>",
      },
    };
    
    const msalInstance = new msal.PublicClientApplication(msalConfig);
    const myAccounts = msalInstance.getAllAccounts();
    
    // If no account is logged in, redirect the user to log in.
    if (myAccounts === undefined || myAccounts.length === 0) {
      try {
        await msalInstance.loginRedirect({
          scopes: ["https://help.kusto.windows.net/.default"],
        });
      } catch (err) {
        console.error(err);
      }
    }
    const account = myAccounts[0];
    const name = account.name;
    window.document.getElementById("main").innerHTML = `Hi ${name}!`;
    
    // Get the access token required to access the specified Azure Data Explorer cluster.
    const accessTokenRequest = {
      account,
      scopes: ["https://help.kusto.windows.net/.default"],
    };
    let acquireTokenResult = undefined;
    try {
      acquireTokenResult = await msalInstance.acquireTokenSilent(accessTokenRequest);
    } catch (error) {
      if (error instanceof InteractionRequiredAuthError) {
        await msalInstance.acquireTokenRedirect(accessTokenRequest);
      }
    }
    
    const accessToken = acquireTokenResult.accessToken;
    
    // Make requests to the specified cluster with the token in the Authorization header.
    const fetchResult = await fetch("https://help.kusto.windows.net/v2/rest/query", {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "Content-Type": "application/json",
      },
      method: "POST",
      body: JSON.stringify({
        db: "Samples",
        csl: "StormEvents | count",
      }),
    });
    const jsonResult = await fetchResult.json();
    
    // The following line extracts the first cell in the result data.
    const count = jsonResult.filter((x) => x.TableKind === "PrimaryResult")[0].Rows[0][0];