Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Mivel az MSAL Node különféle engedélyezésikód-jogosultságokat támogat, az egyes jogosultságokhoz és a hozzájuk tartozó kérésekhez eltérő nyilvános API-k állnak rendelkezésre. Ez a cikk végigvezeti az egyes folyamatokhoz elérhető különböző nyilvános API-kon és a megfelelő kérelemtípuson. Erősen ajánlott implementálni az alkalmazás engedélyezési kódfolyamatát.
Engedélyezési kódfolyamat
Nyilvános API-k
getAuthCodeUrl(): Ez az API a(z)
authorization code grantelső lépése az MSAL Node esetében. A kérelem típusa AuthorizationUrlRequest. Az alkalmazás egy URL-címet kap, amely felhasználható egyauthorization codelétrehozásához. Ez az URL bármely böngészőben megnyitható, ahol a felhasználó megadhatja a hitelesítő adatait, majd a rendszer visszairányítja aredirectUri-hoz az alkalmazás regisztrációja során regisztrált módon, egyauthorization code-val. Aauthorization codemost beváltható egytoken-ra a következő lépéssel. Vegye figyelembe, hogy ha egy nyilvános ügyfélalkalmazás engedélyezési kódjának folyamata folyamatban van, a PKCE használata ajánlott.acquireTokenByCode(): Ez az API a
authorization code grantmásodik lépése az MSAL Node esetében. Az itt létrehozott kérésnek AuthorizationCodeRequest típusúnak kell lennie. Az alkalmazás a fenti lépés részeként kapottauthorization codetovábbítja, és azt egytoken-re cseréli. Vegye figyelembe, hogy ha az engedélyezési kód folyamatot nyilvános kliensalkalmazás esetén használják, a PKCE használata ajánlott.
const authCodeUrlParameters = {
scopes: ["sample_scope"],
redirectUri: "your_redirect_uri",
};
// get url to sign user in and consent to scopes needed for application
cca.getAuthCodeUrl(authCodeUrlParameters).then((response) => {
console.log(response);
}).catch((error) => console.log(JSON.stringify(error)));
const tokenRequest = {
code: "authorization_code",
redirectUri: "your_redirect_uri",
scopes: ["sample_scope"],
};
// acquire a token by exchanging the code
cca.acquireTokenByCode(tokenRequest).then((response) => {
console.log("\nResponse: \n:", response);
}).catch((error) => {
console.log(error);
});
Eszközkód-folyamat
Nyilvános API-k
-
acquireTokenByDeviceCode(): Ez az API lehetővé teszi, hogy az alkalmazás az Eszközkód-hitelesítési folyamattal tokent szerezzen. A kérés típusa DeviceCodeRequest. Ez az API az OAuth 2.0 eszközkód-folyamatával kér le egy
tokena hitelesítésszolgáltatótól. Ez a folyamat olyan eszközökhöz készült, amelyek nem férnek hozzá a böngészőhöz, vagy bemeneti korlátozásokkal rendelkeznek. Az engedélyezési kiszolgáló egy DeviceCode-objektumot ad ki egy ellenőrző kóddal, egy végfelhasználói kóddal és a végfelhasználói ellenőrzési URI-val. A DeviceCode objektumot egy visszahívás biztosítja, és a végfelhasználót arra kell utasítani, hogy egy másik eszközzel lépjen az ellenőrző URI-ra a hitelesítő adatok beviteléhez. Mivel az ügyfél nem tud bejövő kéréseket fogadni, ismételten lekérdezi az engedélyezési kiszolgálót, amíg a végfelhasználó be nem fejezi a hitelesítő adatok bevitelét.
const msalConfig = {
auth: {
clientId: "your_client_id_here",
authority: "your_authority_here",
}
};
const pca = new msal.PublicClientApplication(msalConfig);
const deviceCodeRequest = {
deviceCodeCallback: (response) => (console.log(response.message)),
scopes: ["user.read"],
};
pca.acquireTokenByDeviceCode(deviceCodeRequest).then((response) => {
console.log(JSON.stringify(response));
}).catch((error) => {
console.log(JSON.stringify(error));
});
Jogkivonat-folyamat frissítése
Nyilvános API-k
-
acquireTokenByRefreshToken: Ez az API a megadott frissítési tokent egy új tokenkészletre cserélve szerez tokent. A kérés típusa RefreshTokenRequest. A
refresh tokenrendszer soha nem adja vissza a felhasználónak válaszként, de elérhető a felhasználói gyorsítótárból. Nem interaktív forgatókönyvekhez ajánlott használniacquireTokenSilent(). Az acquireTokenSilent() használatakor az MSAL automatikusan kezeli a tokenek gyorsítótárazását és megújítását.
const config = {
auth: {
clientId: "your_client_id_here",
authority: "your_authority_here",
}
};
const pca = new msal.PublicClientApplication(config);
const refreshTokenRequest = {
refreshToken: "",
scopes: ["user.read"],
};
pca.acquireTokenByRefreshToken(refreshTokenRequest).then((response) => {
console.log(JSON.stringify(response));
}).catch((error) => {
console.log(JSON.stringify(error));
});
Csendes folyamat
Nyilvános API-k
-
acquireTokenSilent: Ez az API felhasználói beavatkozás nélkül kér le egy tokent, ha a felhasználó gyorsítótárat biztosít, vagy ha a gyorsítótár e hívást megelőzően bármely más interaktív folyamat (pl. engedélyezésikód-folyamat) során jön létre. A kérés típusa SilentFlowRequest. A
tokenfelhasználói beavatkozás nélkül lesz lekérve, amikor a felhasználó megadja azt a fiókot, amelyhez a tokent kéri.
/**
* Cache Plugin configuration
*/
const cachePath = "path_to_your_cache_file/msal_cache.json"; // Replace this string with the path to your valid cache file.
const readFromStorage = () => {
return fs.readFile(cachePath, "utf-8");
};
const writeToStorage = (getMergedState) => {
return readFromStorage().then(oldFile =>{
const mergedState = getMergedState(oldFile);
return fs.writeFile(cachePath, mergedState);
})
};
const cachePlugin = {
readFromStorage,
writeToStorage
};
/**
* Public Client Application Configuration
*/
const publicClientConfig = {
auth: {
clientId: "your_client_id_here",
authority: "your_authority_here",
redirectUri: "your_redirectUri_here",
},
cache: {
cachePlugin
},
};
/** Request Configuration */
const scopes = ["your_scopes"];
const authCodeUrlParameters = {
scopes: scopes,
redirectUri: "your_redirectUri_here",
};
const pca = new msal.PublicClientApplication(publicClientConfig);
const msalCacheManager = pca.getCacheManager();
let accounts;
pca.getAuthCodeUrl(authCodeUrlParameters)
.then((response) => {
console.log(response);
}).catch((error) => console.log(JSON.stringify(error)));
const tokenRequest = {
code: req.query.code,
redirectUri: "http://localhost:3000/redirect",
scopes: scopes,
};
pca.acquireTokenByCode(tokenRequest).then((response) => {
console.log("\nResponse: \n:", response);
return msalCacheManager.writeToPersistence();
}).catch((error) => {
console.log(error);
});
// get Accounts
accounts = msalCacheManager.getAllAccounts();
// Build silent request
const silentRequest = {
account: accounts[0], // You would filter accounts to get the account you want to get tokens for
scopes: scopes,
};
// Acquire Token Silently to be used in MS Graph call
pca.acquireTokenSilent(silentRequest).then((response) => {
console.log("\nSuccessful silent token acquisition:\nResponse: \n:", response);
return msalCacheManager.writeToPersistence();
}).catch((error) => {
console.log(error);
});
Ügyfél hitelesítő adatainak folyamata
Nyilvános API-k
- acquireTokenByClientCredential: Ez az API tokent szerez be a bizalmas kliensalkalmazás hitelesítő adatainak felhasználásával történő hitelesítéshez (felhasználó megszemélyesítése helyett) egy másik webszolgáltatás meghívásakor. Ebben a forgatókönyvben az ügyfél általában egy középső szintű webszolgáltatás, egy démonszolgáltatás vagy egy háttérbeli webalkalmazás. A magasabb szintű megbízhatóság érdekében a Microsoft Identitásplatform lehetővé teszi, hogy a hívó szolgáltatás hitelesítő adatként tanúsítványt használjon (a megosztott titkos kód helyett). A kérelem típusa ClientCredentialRequest.
Titkos kódok biztonságos használata
A titkos kulcsokat soha nem szabad szigorúan kódolni. A dotenv npm-csomag segítségével titkos kulcsokat tárolhat egy .env fájlban (amely a projekt gyökérkönyvtárában található), amelyet a .gitignore-ban kell elhelyezni a titkos kódok véletlen feltöltésének megakadályozása érdekében.
import "dotenv/config"; // process.env now has the values defined in a .env file
const config = {
auth: {
clientId: "your_client_id_here",
authority: "your_authority_here",
clientSecret: process.env.clientSecret
}
};
// Create msal application object
const cca = new msal.ConfidentialClientApplication(config);
// 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"
const clientCredentialRequest = {
scopes: ["https://graph.microsoft.com/.default"], // replace with your resource
};
cca.acquireTokenByClientCredential(clientCredentialRequest).then((response) => {
console.log("Response: ", response);
}).catch((error) => {
console.log(JSON.stringify(error));
});
A Flow nevében
- acquireTokenOnBehalfOf: Ez az API az On-Behalf-Of folyamatot valósítja meg, amelyet akkor használnak, amikor egy alkalmazás meghív egy szolgáltatást vagy webes API-t, amelynek viszont meg kell hívnia egy másik szolgáltatást vagy webes API-t, amely valamilyen más hitelesítési folyamatot használ (eszközkód, felhasználónév/jelszó stb.). A hozzáférési jogkivonatot kezdetben a webes API szerezte be (bármelyik webes API-folyamat), majd a webes API ezt a jogkivonatot egy másik jogkivonatra cserélheti az OBO-val. A kérelem típusa OnBehalfOfRequest
A használati útmutatóért tekintse meg az „On Behalf Of” folyamat mintáját: