Share via


Hitelesítés a Microsoft Authentication Library (MSAL) használatával az alkalmazásokban

A fürttel való programozott hitelesítéshez hozzáférési jogkivonatot kell kérnie az Azure Data Explorer Microsoft Entra azonosítójától. Ez a hozzáférési jogkivonat identitásigazolásként szolgál, amikor kéréseket ad ki a fürtnek. Hozzáférési jogkivonat létrehozásához használhatja a Microsoft Authentication Library (MSAL)-folyamatok egyikét.

Ez a cikk bemutatja, hogyan használhatja az MSAL-t a fürtön lévő egyszerű hitelesítéshez. Az MSAL közvetlen használata az egyszerű hitelesítéshez elsősorban olyan webalkalmazások esetében fontos, amelyek nevében (OBO) vagy egyoldalas alkalmazás (SPA) hitelesítést igényelnek. Más esetekben a Kusto-ügyfélkódtárak használatát javasoljuk , mivel leegyszerűsítik a hitelesítési folyamatot.

Ebben a cikkben megismerheti a fő hitelesítési forgatókönyveket, a sikeres hitelesítés biztosításához szükséges információkat, valamint az MSAL hitelesítéshez való használatát.

Hitelesítési forgatókönyvek

A fő hitelesítési forgatókönyvek a következők:

  • Felhasználói hitelesítés: Az emberi felhasználók identitásának ellenőrzésére szolgál.

  • Alkalmazáshitelesítés: Egy olyan alkalmazás identitásának ellenőrzésére szolgál, amelyhez emberi beavatkozás nélkül kell hozzáférnie az erőforrásokhoz konfigurált hitelesítő adatok használatával.

  • OBO-hitelesítés: Lehetővé teszi, hogy egy alkalmazás jogkivonatot cseréljen az említett alkalmazáshoz egy jogkivonattal a Kusto-szolgáltatás eléréséhez. Ezt a folyamatot az MSAL használatával kell implementálni.

  • Egyoldalas alkalmazás (SPA) hitelesítése: Lehetővé teszi, hogy az ügyféloldali SPA-webalkalmazások bejelentkezhessenek a felhasználókba, és jogkivonatokat szerezzenek be a fürt eléréséhez. Ezt a folyamatot az MSAL használatával kell implementálni.

A felhasználó- és alkalmazáshitelesítéshez a Kusto-ügyfélkódtárak használatát javasoljuk. OBO- és SPA-hitelesítés esetén a Kusto-ügyfélkódtárak nem használhatók.

Hitelesítési paraméterek

A jogkivonat-beszerzési folyamat során az ügyfélnek a következő paramétereket kell megadnia:

Paraméter neve Leírás
Erőforrás-azonosító Az erőforrás-azonosító, amelyhez ki szeretné adni a Microsoft Entra hozzáférési jogkivonatot. Az erőforrás-azonosító a fürt URI-ja portinformációk és elérési út nélkül.

Példa: A fürt erőforrás-azonosítójahelp.https://help.kusto.windows.net
Microsoft Entra bérlőazonosító Microsoft Entra azonosító egy több-bérlős szolgáltatás, és minden szervezet létrehozhat egy könyvtár nevű objektumot, amely biztonsági objektumokat, például felhasználói fiókokat és alkalmazásokat tárol. Microsoft Entra azonosító gyakran bérlőként hivatkozik a könyvtárra. Minden bérlő rendelkezik egy GUID formátumú bérlőazonosítóval. A szervezet tartományneve sok esetben a Microsoft Entra bérlő identitására is használható.

Példa: Egy "Contoso" szervezet rendelkezhet a bérlőazonosítóval 12345678-a123-4567-b890-123a456b789c és a tartománynévvel contoso.com.
Microsoft Entra szolgáltató URI-ja A hitelesítéshez használt végpont. A Microsoft Entra könyvtár vagy bérlő határozza meg a Microsoft Entra szolgáltató URI-jait. Az URI a https://login.microsoftonline.com/{tenantId}{tenantId} bérlőazonosító vagy a tartománynév.

Példa: Például: https://login.microsoftonline.com/12345678-a123-4567-b890-123a456b789c.

Megjegyzés

A Microsoft Entra szolgáltatásvégpont megváltozik az országos felhőkben. Ha egy országos felhőben üzembe helyezett Azure Data Explorer szolgáltatással dolgozik, állítsa be a megfelelő nemzeti felhőbeli Microsoft Entra szolgáltatásvégpontot.

Felhasználói hitelesítés végrehajtása MSAL használatával

Az alábbi kódminta bemutatja, hogyan szerezhet be engedélyezési jogkivonatot az MSAL használatával a fürthöz. Az engedélyezés olyan módon történik, amely elindítja az interaktív bejelentkezési felhasználói felületet. Az appRedirectUri az URL-cím, amelyre Microsoft Entra azonosító átirányítja a hitelesítés sikeres befejezése után. Az MSAL kinyeri az engedélyezési kódot ebből az átirányításból.

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

Megjegyzés

  • Javasoljuk, hogy amikor csak lehetséges, használja a Kusto-ügyfélkódtárakat . Ezek a kódtárak leegyszerűsítik a hitelesítési folyamatot azáltal, hogy lehetővé teszik a hitelesítési tulajdonságok megadását a Kusto kapcsolati karakterlánc.
  • A Kusto-ügyfélkódtárakkal Microsoft Entra jogkivonatokat a rendszer a felhasználó számítógépén található helyi jogkivonat-gyorsítótárban tárolja, hogy csökkentse a hitelesítő adatok kérésének számát. A gyorsítótárfájl %APPDATA%\Kusto\userTokenCache.data , és csak a bejelentkezett felhasználó férhet hozzá.

Alkalmazáshitelesítés végrehajtása MSAL használatával

Az alábbi kódminta bemutatja, hogyan szerezhet be engedélyezési jogkivonatot az MSAL használatával a fürthöz. Ebben a folyamatban nem jelenik meg kérdés. Az alkalmazásnak Microsoft Entra azonosítóval kell regisztrálnia, és rendelkeznie kell egy alkalmazáskulccsal vagy egy X509v2-tanúsítvánnyal, amelyet Microsoft Entra ID állított ki. Alkalmazás beállításához lásd: Microsoft Entra alkalmazás kiépítése.

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

Megjegyzés

Javasoljuk, hogy amikor csak lehetséges, használja a Kusto-ügyfélkódtárakat . Ezek a kódtárak leegyszerűsítik a hitelesítési folyamatot azáltal, hogy lehetővé teszik a hitelesítési tulajdonságok megadását a Kusto kapcsolati karakterlánc.

Helyszíni (OBO) hitelesítés végrehajtása

A hitelesítés akkor fontos, ha a webalkalmazás vagy szolgáltatás közvetítőként működik a felhasználó vagy az alkalmazás és a fürt között.

Ebben a forgatókönyvben egy alkalmazás egy Microsoft Entra hozzáférési jogkivonatot küld egy tetszőleges erőforráshoz. Ezután az alkalmazás ezt a jogkivonatot használja egy új Microsoft Entra hozzáférési jogkivonat beszerzéséhez az Azure Data Explorer-erőforráshoz. Ezután az alkalmazás hozzáférhet a fürthöz az eredeti Microsoft Entra hozzáférési jogkivonat által jelzett rendszernév nevében. Ezt a folyamatot OAuth 2.0-nak nevezzük a hitelesítés nevében. Általában több konfigurációs lépésre van szükség Microsoft Entra azonosítóval, és bizonyos esetekben a Microsoft Entra bérlő rendszergazdájának külön hozzájárulására lehet szükség.

A nevében történő hitelesítés végrehajtása:

  1. Microsoft Entra alkalmazás kiépítése.

  2. Hozzon létre megbízhatósági kapcsolatot az alkalmazás és a fürt között. Ehhez kövesse a Delegált engedélyek konfigurálása című témakör lépéseit.

  3. A kiszolgálókódban az MSAL használatával hajtsa végre a tokencserét.

    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. Lekérdezések futtatásához használja a tokent. Például:

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

Egyoldalas alkalmazás (SPA) hitelesítésének végrehajtása

SPA-webügyfél hitelesítéséhez használja az OAuth engedélyezési kódfolyamatot.

Ebben a forgatókönyvben a rendszer átirányítja az alkalmazást, hogy bejelentkezjen Microsoft Entra azonosítóba. Ezután Microsoft Entra azonosító visszakerül az alkalmazásba egy engedélyezési kóddal az URI-ban. Ezután az alkalmazás kérést küld a jogkivonatvégpontnak a hozzáférési jogkivonat lekéréséhez. A jogkivonat 24 órán át érvényes, amely alatt az ügyfél újra felhasználhatja a jogkivonat csendes beszerzésével.

Microsoft Identitásplatform részletes oktatóanyagokkal rendelkezik a különböző használati esetekhez, például React, Angular és JavaScripthez.

Webügyfél hitelesítésének beállítása:

  1. Microsoft Entra alkalmazás kiépítése.

  2. Konfigurálja az alkalmazást a MSAL.js 2.0-s verzióban leírt módon hitelesítési kódfolyamattal.

  3. A MSAL.js 2.0 kódtár használatával jelentkezzen be egy felhasználóba, és hitelesítse magát a fürtben. Microsoft Identitásplatform részletes oktatóanyagokkal rendelkezik a különböző használati esetekhez, például React, Angular és JavaScripthez.

    Az alábbi példa a MSAL.js kódtárat használja az Azure Data Explorer eléréséhez.

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