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

Kümenizle program aracılığıyla kimlik doğrulaması yapmak için Azure Veri Gezgini özgü Microsoft Entra kimliğinden 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ı şunlardı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.
kiracı kimliğini Microsoft Entra Microsoft Entra kimliği çok kiracılı bir hizmettir ve her kuruluş, kullanıcı hesapları ve uygulamalar gibi güvenlikle ilgili nesneleri barındıran dizin olarak adlandırılan bir nesne oluşturabilir. Microsoft Entra kimliği 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ıyı 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ı, 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

ulusal bulutlarda Microsoft Entra hizmet uç noktası 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 kimliğinin 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çler, kimlik bilgileri 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 kimliğiyle kayıtlı olması ve Microsoft Entra kimliğiyle verilmiş bir uygulama anahtarı veya X509v2 sertifikası 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 çalıştığında, adına kimlik doğrulaması geçerlidir.

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ış, adına OAuth 2.0 kimlik doğrulama akışı olarak adlandırılır. Genellikle Microsoft Entra kimliğine sahip 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 bölümündeki 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. Örnek:

    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 kimliğinde oturum açmak üzere yeniden yönlendirilir. Ardından Microsoft Entra kimliği, URI'de bir yetkilendirme koduyla uygulamaya geri yönlendirilir. Ardından uygulama, erişim belirtecini almak için belirteç uç noktasına bir istekte bulunur. Belirteç, istemcinin belirteci sessizce alarak yeniden kullanabileceği 24 saat boyunca geçerlidir.

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

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 kod akışıyla açıklandığı gibi yapılandırın.

  3. Kullanıcının oturumunu açmak ve kümenizde kimlik doğrulaması yapmak için MSAL.js 2.0 kitaplığını kullanın. Microsoft kimlik platformu React,Angular ve JavaScript gibi farklı kullanım örnekleri için ayrıntılı öğreticiler vardır.

    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];