Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A következőkre vonatkozik:
Munkaerő-bérlők (további információ)
Ebben az oktatóanyagban egy konzoldémonalkalmazást hoz létre, amely saját identitásával hívja meg a Microsoft Graph API-t. Az általad készített démonalkalmazás a Microsoft Authentication Library-t (MSAL) használja Node.js számára.
Kövesse az oktatóanyag lépéseit a következőkhöz:
- Az alkalmazás regisztrálása az Azure Portalon
- Node.js konzol démonalkalmazás-projekt létrehozása
- Hitelesítési logika hozzáadása az alkalmazáshoz
- Alkalmazásregisztráció részleteinek hozzáadása
- Metódus hozzáadása webes API meghívásához
- Az alkalmazás tesztelése
Előfeltételek
- Node.js
- Visual Studio Code vagy más kódszerkesztő
Az alkalmazás regisztrálása
Először kövesse a Regisztráljon egy alkalmazást a Microsoft identitásplatformon részben található lépéseket az alkalmazás regisztrálásához.
Az alkalmazásregisztrációhoz használja az alábbi beállításokat:
- Név:
NodeDaemonApp(javasolt) - Támogatott fióktípusok: Csak ebben a szervezeti címtárban lévő fiókok
- API-engedélyek: >>
- Titkos ügyfélkód:
*********(ezt az értéket egy későbbi lépésben rögzítheti – csak egyszer jelenik meg)
A projekt létrehozása
Először hozzon létre egy könyvtárat ehhez a Node.js oktatóanyag-projekthez. Például a NodeDaemonApp.
A terminálban váltson a létrehozott könyvtárra (a projekt gyökérkönyvtárára), majd futtassa a következő parancsokat:
npm init -y npm install --save dotenv yargs axios @azure/msal-nodeEzután szerkessze a package.json fájlt a projekt gyökerében, és az előtag
mainértékétbin/a következőhöz hasonlóan:"main": "bin/index.js",Most hozza létre a bin könyvtárat, és a tárolón belül adja hozzá a következő kódot egy index.js nevű új fájlhoz:
#!/usr/bin/env node // read in env settings require('dotenv').config(); const yargs = require('yargs'); const fetch = require('./fetch'); const auth = require('./auth'); const options = yargs .usage('Usage: --op <operation_name>') .option('op', { alias: 'operation', describe: 'operation name', type: 'string', demandOption: true }) .argv; async function main() { console.log(`You have selected: ${options.op}`); switch (yargs.argv['op']) { case 'getUsers': try { // here we get an access token const authResponse = await auth.getToken(auth.tokenRequest); // call the web API with the access token const users = await fetch.callApi(auth.apiConfig.uri, authResponse.accessToken); // display result console.log(users); } catch (error) { console.log(error); } break; default: console.log('Select a Graph operation first'); break; } }; main();
Az imént létrehozott index.js fájl két másik csomópontmodulra hivatkozik, amelyeket a következő lépésben fog létrehozni:
- auth.js – Az MSAL Node-ot használja a hozzáférési tokenek beszerzéséhez a Microsoft identitásplatformtól.
- fetch.js – Adatokat kér le a Microsoft Graph API-ból a (auth.js-ben beszerzett) hozzáférési jogkivonatok beiktatásával az API-nak küldött HTTP-kérésekben.
Az oktatóanyag végén a projekt fájl- és könyvtárstruktúrájának az alábbihoz hasonlóan kell kinéznie:
NodeDaemonApp/
├── bin
│ ├── auth.js
│ ├── fetch.js
│ ├── index.js
├── package.json
└── .env
Hitelesítési logika hozzáadása
A bin könyvtárban adja hozzá a következő kódot egy auth.js nevű új fájlhoz. Az auth.js kód egy hozzáférési jogkivonatot szerez be a Microsoft identitásplatformról, hogy az belefoglalható legyen a Microsoft Graph API-kérésekbe.
const msal = require('@azure/msal-node');
/**
* Configuration object to be passed to MSAL instance on creation.
* For a full list of MSAL Node configuration parameters, visit:
* https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-node/docs/configuration.md
*/
const msalConfig = {
auth: {
clientId: process.env.CLIENT_ID,
authority: process.env.AAD_ENDPOINT + '/' + process.env.TENANT_ID,
clientSecret: process.env.CLIENT_SECRET,
}
};
/**
* With client credentials flows permissions need to be granted in the portal by a tenant administrator.
* The scope is always in the format '<resource>/.default'. For more, visit:
* https://learn.microsoft.com/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow
*/
const tokenRequest = {
scopes: [process.env.GRAPH_ENDPOINT + '/.default'],
};
const apiConfig = {
uri: process.env.GRAPH_ENDPOINT + '/v1.0/users',
};
/**
* Initialize a confidential client application. For more info, visit:
* https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-node/docs/initialize-confidential-client-application.md
*/
const cca = new msal.ConfidentialClientApplication(msalConfig);
/**
* Acquires token with client credentials.
* @param {object} tokenRequest
*/
async function getToken(tokenRequest) {
return await cca.acquireTokenByClientCredential(tokenRequest);
}
module.exports = {
apiConfig: apiConfig,
tokenRequest: tokenRequest,
getToken: getToken
};
A fenti kódrészletben először létrehozunk egy konfigurációs objektumot (msalConfig), majd átadjuk egy MSAL ConfidentialClientApplication inicializálásához. Ezután létrehozunk egy módszert a jogkivonatoknak az ügyfél-hitelesítő adatok segítségével történő beszerzésére, és végül elérhetővé tesszük ezt a modult, hogy a main.js hozzáférhessen. A modul konfigurációs paraméterei egy környezeti fájlból származnak, amelyet a következő lépésben fogunk létrehozni.
Alkalmazásregisztráció részleteinek hozzáadása
Hozzon létre egy környezeti fájlt a jogkivonatok beszerzésekor használt alkalmazásregisztrációs adatok tárolásához. Ehhez hozzon létre egy .env nevű fájlt a minta gyökérmappájában (NodeDaemonApp), és adja hozzá a következő kódot:
# Credentials
TENANT_ID=Enter_the_Tenant_Id_Here
CLIENT_ID=Enter_the_Application_Id_Here
CLIENT_SECRET=Enter_the_Client_Secret_Here
# Endpoints
AAD_ENDPOINT=Enter_the_Cloud_Instance_Id_Here/
GRAPH_ENDPOINT=Enter_the_Graph_Endpoint_Here/
Töltse ki ezeket a részleteket az Azure alkalmazásregisztrációs portálról beszerzett értékekkel:
-
Enter_the_Tenant_Id_hereaz alábbiak egyikének kell lennie:- Ha az alkalmazás támogatja a szervezeti címtárban lévő fiókokat, cserélje le ezt az értéket a bérlőazonosítóra vagy a bérlő nevére. Például:
contoso.microsoft.com. - Ha az alkalmazás bármely szervezeti könyvtárban támogatja a fiókokat, cserélje le ezt az értéket a következőre
organizations: . - Ha az alkalmazás bármely szervezeti címtárban és személyes Microsoft-fiókban támogatja a fiókokat, cserélje le ezt az értéket a következőre
common: . - A támogatást úgy korlátozhatja, hogy csak személyes Microsoft-fiókokra vonatkozzon, ha ezt az értéket -re cseréli.
- Ha az alkalmazás támogatja a szervezeti címtárban lévő fiókokat, cserélje le ezt az értéket a bérlőazonosítóra vagy a bérlő nevére. Például:
-
Enter_the_Application_Id_Here: A regisztrált alkalmazás (ügyfél) azonosítója . -
Enter_the_Cloud_Instance_Id_Here: Az az Azure-felhőpéldány, amelyben az alkalmazás regisztrálva van.- A fő (vagy globális) Azure-felhőbe írja be a következőt
https://login.microsoftonline.com: . - A nemzeti felhők (például Kína) esetében a nemzeti felhőkben megtalálhatja a megfelelő értékeket.
- A fő (vagy globális) Azure-felhőbe írja be a következőt
-
Enter_the_Graph_Endpoint_Herea Microsoft Graph API azon példánya, amellyel az alkalmazásnak kommunikálnia kell.-
A globális Microsoft Graph API-végpont esetében cserélje le a sztring mindkét példányát a következőre
https://graph.microsoft.com: . - A nemzeti felhő üzembe helyezések végpontjairól lásd a Nemzeti felhő üzembe helyezéseket a Microsoft Graph dokumentációjában.
-
A globális Microsoft Graph API-végpont esetében cserélje le a sztring mindkét példányát a következőre
Metódus hozzáadása webes API meghívásához
A bin mappában hozzon létre egy fetch.js nevű fájlt, és adja hozzá a következő kódot a REST-hívások Microsoft Graph API-hoz való indításához:
const axios = require('axios');
/**
* Calls the endpoint with authorization bearer token.
* @param {string} endpoint
* @param {string} accessToken
*/
async function callApi(endpoint, accessToken) {
const options = {
headers: {
Authorization: `Bearer ${accessToken}`
}
};
console.log('request made to web API at: ' + new Date().toString());
try {
const response = await axios.get(endpoint, options);
return response.data;
} catch (error) {
console.log(error)
return error;
}
};
module.exports = {
callApi: callApi
};
Itt a callApi metódussal HTTP-kérést GET lehet küldeni egy olyan védett erőforrásra, amely hozzáférési jogkivonatot igényel. A kérés ezután visszaadja a tartalmat a hívónak. Ez a módszer hozzáadja a beszerzett tokent az HTTP Authorization mező fejlécéhez. A védett erőforrás itt a Microsoft Graph API felhasználói végpontja , amely azon bérlő felhasználóit jeleníti meg, ahol az alkalmazás regisztrálva van.
Az alkalmazás tesztelése
Befejezte az alkalmazás létrehozását, és készen áll az alkalmazás működésének tesztelésére.
Indítsa el a Node.js konzol démonalkalmazást a következő parancs futtatásával a projektmappában:
node . --op getUsers
Ennek jSON-választ kell adnia a Microsoft Graph API-nak, és a konzolon felhasználói objektumok tömbjének kell megjelennie:
You have selected: getUsers
request made to web API at: Fri Jan 22 2021 09:31:52 GMT-0800 (Pacific Standard Time)
{
'@odata.context': 'https://graph.microsoft.com/v1.0/$metadata#users',
value: [
{
displayName: 'Adele Vance'
givenName: 'Adele',
jobTitle: 'Retail Manager',
mail: 'AdeleV@msaltestingjs.onmicrosoft.com',
mobilePhone: null,
officeLocation: '18/2111',
preferredLanguage: 'en-US',
surname: 'Vance',
userPrincipalName: 'AdeleV@msaltestingjs.onmicrosoft.com',
id: '00aa00aa-bb11-cc22-dd33-44ee44ee44ee'
}
]
}
Az alkalmazás működése
Ez az alkalmazás az OAuth 2.0 ügyfél hitelesítő adatainak megadását használja. Ez az engedélytípus általában olyan kiszolgálóközi interakciók esetén használatos, amelyeknek a felhasználóval való azonnali interakció nélkül, a háttérben kell futniuk. Az autentikációs áramlás megengedi egy webszolgáltatásnak (bizalmas ügyfélként), hogy saját hitelesítő adatait használja ahelyett, hogy egy felhasználót megszemélyesítene, amikor hitelesítést végez egy másik webszolgáltatás hívásakor. Az ezzel a hitelesítési modellel támogatott alkalmazások típusa általában démonok vagy szolgáltatásfiókok.
Az ügyfél hitelesítő adatainak lekérésére szolgáló hatókör az erőforrás neve, amelyet a következő követ /.default: . Ez a jelölés arra utasítja a Microsoft Entra-azonosítót, hogy az alkalmazásregisztráció során statikusan deklarált alkalmazásszintű engedélyeket használja. Ezeket az API-engedélyeket egy bérlői rendszergazdának kell megadnia.
Következő lépések
Ha részletesebben szeretne megismerkedni Node.js démonalkalmazás-fejlesztéssel a Microsoft Identitásplatform, tekintse meg többrészes forgatókönyv-sorozatunkat: