rychlý start: získání přístupového tokenu a volání rozhraní Microsoft Graph API z aplikace pracovní plochy

V tomto rychlém startu si stáhnete a spustíte ukázku kódu, která demonstruje, jak se aplikace pracovní plochy může přihlašovat uživatelům a získat přístupové tokeny pro volání rozhraní Microsoft Graph API.

V tomto rychlém startu se používá Knihovna ověřování Microsoft pro Node.js (uzel MSAL) s tokem autorizačního kódu s PKCE.

Požadavky

Registrace a stažení ukázkové aplikace

Začněte tím, že Projděte následující kroky.

Krok 1: registrace aplikace

Pokud chcete zaregistrovat aplikaci a ručně přidat informace o registraci aplikace ke svému řešení, postupujte následovně:

  1. Přihlaste se k webu Azure Portal.
  2. Pokud máte přístup k více klientům, pomocí filtru adresáře a odběry v horní nabídce přepněte do tenanta, ve kterém chcete aplikaci zaregistrovat.
  3. Vyhledejte a vyberte Azure Active Directory.
  4. V části Spravovat vyberte Registrace aplikací > Nová registrace.
  5. Zadejte název vaší aplikace, například msal-node-desktop . Uživatel vaší aplikace může tento název zobrazit a později ho můžete změnit.
  6. Výběrem možnosti Registrovat aplikaci vytvořte.
  7. V části Spravovat vyberte ověřování.
  8. Vyberte Přidat platformu > mobilní a desktopové aplikace.
  9. V části identifikátory URI pro přesměrování zadejte msal://redirect .
  10. Vyberte Konfigurovat.

Krok 1: Konfigurace aplikace v Azure Portal

Aby ukázka kódu pro tento rychlý Start fungovala, je nutné přidat adresu URL odpovědi jako msal://Redirect.

Už nakonfigurované Vaše aplikace je nakonfigurovaná s těmito atributy.

Krok 2: stažení ukázkového projektu

Poznámka

Enter_the_Supported_Account_Info_Here

Krok 3: konfigurace projektu s elektronickou ukázkou

  1. Extrahujte soubor zip do místní složky blízko kořene disku, například C:/Azure-Samples.

  2. Upravte . env a nahraďte hodnoty polí TENANT_ID a CLIENT_ID následujícím fragmentem kódu:

    "TENANT_ID": "Enter_the_Tenant_Id_Here",
    "CLIENT_ID": "Enter_the_Application_Id_Here"
    

    Kde:

    • Hodnota Enter_the_Application_Id_Here je ID aplikace (klienta), kterou jste zaregistrovali.
    • Enter_the_Tenant_Id_Here – Nahraďte tuto hodnotu ID tenanta nebo názvem tenanta (například contoso.Microsoft.com).

Tip

Pokud chcete najít hodnoty ID aplikace (klienta), ID adresáře (tenanta), navštivte stránku Přehled aplikace v Azure Portal.

Krok 4: spuštění aplikace

Krok 4: spuštění aplikace

Je potřeba nainstalovat tyto závislosti této ukázky:

npm install

Pak spusťte aplikaci prostřednictvím příkazového řádku nebo konzoly:

npm start

Mělo by se zobrazit uživatelské rozhraní aplikace s přihlašovacím tlačítkem.

O kódu

Níže jsou popsány některé důležité aspekty ukázkové aplikace.

Uzel MSAL

Uzel MSAL je knihovna používaná k přihlašování uživatelů a žádosti o tokeny, které se používají pro přístup k rozhraní API chráněnému Microsoft Identity Platform. Další informace o tom, jak používat uzel MSAL s desktopovým aplikacemi, najdete v tomto článku.

Uzel MSAL můžete nainstalovat spuštěním následujícího příkazu npm.

npm install @azure/msal-node --save

Inicializace knihovny MSAL

Přidáním následujícího kódu můžete přidat odkaz na uzel MSAL:

const { PublicClientApplication } = require('@azure/msal-node');

Potom inicializujte knihovnu MSAL pomocí následujícího kódu:

const MSAL_CONFIG = {
    auth: {
        clientId: "Enter_the_Application_Id_Here",
        authority: "https://login.microsoftonline.com/Enter_the_Tenant_Id_Here",
    },
};

const pca = new PublicClientApplication(MSAL_CONFIG);
Kde: Description
clientId Je ID aplikace (klienta), kterou jste zaregistrovali na webu Azure Portal. Tuto hodnotu najdete na stránce Přehled aplikace na webu Azure Portal.
authority Koncový bod služby tokenů zabezpečení pro uživatele k ověření, Obvykle https://login.microsoftonline.com/{tenant} pro veřejný cloud, kde {tenant} je název vašeho tenanta nebo ID tenanta.

Žádosti o tokeny

V první nožkě toku autorizačního kódu s PKCE Připravte a odešlete požadavek autorizačního kódu s příslušnými parametry. Potom v druhé nožkě toku počkejte na odpověď autorizačního kódu. Po získání kódu ho vyměňovat, aby získal token.

// The redirect URI you setup during app registration with a custom file protocol "msal"
const redirectUri = "msal://redirect";

const cryptoProvider = new CryptoProvider();

const pkceCodes = {
    challengeMethod: "S256", // Use SHA256 Algorithm
    verifier: "", // Generate a code verifier for the Auth Code Request first
    challenge: "" // Generate a code challenge from the previously generated code verifier
};

/**
 * Starts an interactive token request
 * @param {object} authWindow: Electron window object
 * @param {object} tokenRequest: token request object with scopes
 */
async function getTokenInteractive(authWindow, tokenRequest) {

    /**
     * Proof Key for Code Exchange (PKCE) Setup
     *
     * MSAL enables PKCE in the Authorization Code Grant Flow by including the codeChallenge and codeChallengeMethod
     * parameters in the request passed into getAuthCodeUrl() API, as well as the codeVerifier parameter in the
     * second leg (acquireTokenByCode() API).
     */

    const {verifier, challenge} = await cryptoProvider.generatePkceCodes();

    pkceCodes.verifier = verifier;
    pkceCodes.challenge = challenge;

    const authCodeUrlParams = {
        redirectUri: redirectUri
        scopes: tokenRequest.scopes,
        codeChallenge: pkceCodes.challenge, // PKCE Code Challenge
        codeChallengeMethod: pkceCodes.challengeMethod // PKCE Code Challenge Method
    };

    const authCodeUrl = await pca.getAuthCodeUrl(authCodeUrlParams);

    // register the custom file protocol in redirect URI
    protocol.registerFileProtocol(redirectUri.split(":")[0], (req, callback) => {
        const requestUrl = url.parse(req.url, true);
        callback(path.normalize(`${__dirname}/${requestUrl.path}`));
    });

    const authCode = await listenForAuthCode(authCodeUrl, authWindow); // see below

    const authResponse = await pca.acquireTokenByCode({
        redirectUri: redirectUri,
        scopes: tokenRequest.scopes,
        code: authCode,
        codeVerifier: pkceCodes.verifier // PKCE Code Verifier
    });

    return authResponse;
}

/**
 * Listens for auth code response from Azure AD
 * @param {string} navigateUrl: URL where auth code response is parsed
 * @param {object} authWindow: Electron window object
 */
async function listenForAuthCode(navigateUrl, authWindow) {

    authWindow.loadURL(navigateUrl);

    return new Promise((resolve, reject) => {
        authWindow.webContents.on('will-redirect', (event, responseUrl) => {
            try {
                const parsedUrl = new URL(responseUrl);
                const authCode = parsedUrl.searchParams.get('code');
                resolve(authCode);
            } catch (err) {
                reject(err);
            }
        });
    });
}
Kde: Description
authWindow Aktuální elektronické okno v procesu.
tokenRequest obsahuje požadované obory, například "User.Read" pro Microsoft Graph nebo "api://<Application ID>/access_as_user" pro vlastní webová rozhraní api.

Další kroky

Další informace o vývoji aplikací pro elektronickou plochu pomocí uzlu MSAL najdete v tomto kurzu: