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.
Amikor az MSAL Node tokent kér le, azt a memóriában gyorsítótárazza későbbi használatra. Az MSAL Node kezeli Ön helyett a token élettartamát és megújítását. Az API-k például acquireTokenSilent() lekérik a hozzáférési jogkivonatokat egy adott fiók gyorsítótárából:
Az MSAL biztonsági okokból nem teszi közzé a frissítési jogkivonatokat. A refresh tokenek beszerzésével kapcsolatos tudnivalókért tekintse meg a GYIK részt.
Titkos ügyfélkódok biztonságos használata
Az ügyfél titkos kódját 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.
const msal = require('@azure/msal-node');
require('dotenv').config(); // process.env now has the values defined in a .env file
// Create msal application object
const cca = new msal.ConfidentialClientApplication({
auth: {
clientId: "Enter_the_Application_Id_Here", // e.g. "00001111-aaaa-2222-bbbb-3333cccc4444" (guid)
authority: "https://login.microsoftonline.com/Enter_the_Tenant_Info_Here", // e.g. "common" or your tenantId (guid)
clientSecret: process.env.clientSecret // obtained during app registration
}
});
/**
* acquireToken* APIs return an account object containing the "homeAccountId"
* you should keep a record of this in your app and use it later on when calling acquireTokenSilent
*/
const someUserHomeAccountId = "Enter_User_Home_Account_Id";
const msalTokenCache = cca.getTokenCache();
const account = await msalTokenCache.getAccountByHomeId(someUserHomeAccountId);
const silentTokenRequest = {
account: account,
scopes: ["User.Read"],
};
cca.acquireTokenSilent(silentTokenRequest).then((response) => {
// do something with response
}).catch((error) => {
// catch and handle errors
});
Éles környezetben valószínűleg szerializálni és őrizni szeretné a jogkivonat-gyorsítótárat. Az alkalmazás típusától függően a következőt teheti:
- Asztali alkalmazások, konzolalkalmazások (nyilvános ügyfélalkalmazások (PCA)):
- Használja a MSAL Node Extensions szolgáltatást, amely Windows, Linux és macOS rendszeren perzisztenciai és tárolt állapotban történő titkosítási megoldásokat biztosít.
- Webalkalmazások, webes API-k, démonalkalmazások (bizalmas ügyfélalkalmazások (CCA)):
- Az MSAL memóriában tárolt tokengyorsítótára nem skálázódik éles környezetben. Használja az elosztott token-gyorsítótárazási mintát a gyorsítótárnak az Ön által választott tárolási környezetben való megőrzéséhez (Redis, MongoDB, SQL-adatbázisok stb. – tartsa szem előtt, hogy ezeket együtt is használhatja pl. egy Redis-szerű memóriagyorsítótárat a perzisztencia első rétegeként, valamint egy SQL-adatbázist második, stabilabb perzisztenciarétegként)
Memóriabeli gyorsítótár
Az MSAL memórián belüli gyorsítótárat tart fenn. A memóriabeli gyorsítótár az alkalmazásgyorsítótár állapotára jellemző. A memóriabeli gyorsítótár élettartama megegyezik az MSAL-alkalmazásobjektum élettartamával. Ha az MSAL-t használó folyamat újraindul, a gyorsítótár törlődik, amikor a folyamat életciklusa befejeződik. Ha a memóriában lévő gyorsítótár üres, és nincs perzisztens gyorsítótár, amelyből a gyorsítótár visszaállítható, a felhasználóknak újra kell hitelesíteniük magukat. Amikor ez megtörténik, ha a felhasználónak továbbra is aktív munkamenete van a Microsoft Entra ID-val, előfordulhat, hogy mindenféle felszólítás nélkül újra hitelesül, ez azonban akkor is rontja a felhasználói élményt. A szolgáltatások közötti forgatókönyvek (vagyis az ügyfél-hitelesítő adatokra épülő folyamat és a meghatalmazotti folyamat) szintén problémásak, mert a token Microsoft Entra ID-ból való lekérése HTTP-kéréseket igényel, és sokkal lassabb, mint a token gyorsítótárból való lekérése.
Vegye figyelembe, hogy a memóriabeli gyorsítótár nem méretezhető a kiszolgálóoldali alkalmazások számára, és a teljesítmény csökken, miután néhány 100 tokent tárolt a gyorsítótárban. Webalkalmazások és webes API-forgatókönyvek esetén ez körülbelül néhány 100 felhasználó kiszolgálását szolgálja ki. A démonalkalmazás-forgatókönyvek esetében, amelyek ügyfél-hitelesítő adatokat adnak meg más alkalmazások meghívásához, ez néhány 100 bérlőt jelent. További információért tekintse meg az alábbi teljesítményt .
⚠️ Javasoljuk a gyorsítótár tartós tárolásáttitkosítással minden éles alkalmazás esetében, mind a biztonság, mind a kívánt gyorsítótár-megőrzési idő érdekében. Ha úgy dönt, hogy nem tartja meg a gyorsítótárat, a TokenCache felület továbbra is elérhető a gyorsítótárazott entitások eléréséhez.
Perzisztens gyorsítótár
Az MSAL-csomópont aktiválja az eseményeket a memóriában lévő gyorsítótár elérésekor, és az alkalmazások eldönthetik, hogy megőrzik-e a gyorsítótárat (lásd: TokenCacheContext) (például egy fájlra, egy SQL-adatbázisra stb.). Ez két műveletből áll:
- A gyorsítótár elérése előtt töltse be azt a perzisztens tárolóból az MSAL memóriájába
- Ha a memóriabeli gyorsítótár megváltozott a legutóbbi hozzáférés óta, mentse a gyorsítótárat a megőrzése érdekében
A gyorsítótár megőrzéséhez az MSAL egy egyéni gyorsítótár beépülő modult fogad el a konfigurációban. Ennek a beépülő modulnak implementálnia kell az ICachePlugin felületet:
interface ICachePlugin {
beforeCacheAccess: (tokenCacheContext: TokenCacheContext) => Promise<void>;
afterCacheAccess: (tokenCacheContext: TokenCacheContext) => Promise<void>;
}
A felület alapszintű implementációja ICachePlugin a következő lehet (lásd még a teljesítményt és a biztonságot , ha kiszolgálóoldali alkalmazást hoz létre):
class MyCachePlugin implements ICachePlugin {
private client: ICacheClient;
constructor(client: ICacheClient) {
this.client = client; // client object to access the persistent cache
}
public async beforeCacheAccess(cacheContext: TokenCacheContext): Promise<void> {
const cacheData = await this.client.get(); // get the cache from persistence
cacheContext.tokenCache.deserialize(cacheData); // deserialize it to in-memory cache
}
public async afterCacheAccess(cacheContext: TokenCacheContext): Promise<void> {
if (cacheContext.cacheHasChanged) {
await this.client.set(cacheContext.tokenCache.serialize()); // deserialize in-memory cache to persistence
}
}
}
- Ha nyilvános ügyfélalkalmazást fejleszt, az MSAL Node Extensions kezeli ezt Az Ön számára.
- Ha bizalmas ügyfélalkalmazást fejleszt, a gyorsítótárat egy külön szolgáltatáson keresztül kell őriznie, mivel egyetlen kiszolgálónkénti gyorsítótárpéldány nem alkalmas több kiszolgálót és alkalmazáspéldányt tartalmazó felhőkörnyezetben.
Határozottan javasoljuk a tokengyorsítótár titkosítását, amikor azt lemezen tárolja. Nyilvános kliensalkalmazások esetén ez alapértelmezetten elérhető az MSAL Node Extensions használatával. A bizalmas ügyfelek esetében azonban Ön felelős a megfelelő titkosítási megoldás kialakításáért.
Teljesítmény és biztonság
Nyilvános ügyfélalkalmazásokban az MSAL csomópontbővítmények biztosítják a teljesítményt és a biztonságot.
A felhasználókat kezelő bizalmas ügyfélalkalmazások (a felhasználókat bejelentkező és webes API-kat hívó webalkalmazások, valamint az alsóbb rétegbeli webes API-kat hívó webes API-k) esetében számos felhasználó lehet aktív egyidejűleg egy adott alkalmazás esetében. Javasoljuk, hogy felhasználónként egy gyorsítótár-blobot szerializáljon (lásd : CacheRecord). Ez segíthet a gyorsítótár elosztott rendszerek közötti skálázásában. Használjon egy kulcsot a gyorsítótár particionálásához (pl.partíciókulcs), például:
- Webalkalmazások esetén:
<userObjectId>.<tenantId>(azazhomeAccountId) - Több-bérlős démonalkalmazások esetén az ügyfél hitelesítő adatainak megadása:
<clientId>.<tenantId> - Más webes API-kat OBO használatával meghívó webes API-k esetén: a bejövő hozzáférési token hash-e (azaz
oboAssertion) – az a token, amelyet később OBO-tokenre cserélnek
⚠️ Győződjön meg arról, hogy a teljesítmény további információt nyújt a használat monitorozásáról és a gyenge teljesítmény elkerüléséről.
Webalkalmazások
Mivel a webalkalmazások felhasználói elérésűek, és gyakran munkamenetekre támaszkodnak, hogy nyomon kövessék az egyes felhasználókat, a gyorsítótárazáshoz szükséges partíciókulcsot gyakran a munkamenet adatai tárolják, és le kell kérni a gyorsítótár-keresés előtt. Ennek érdekében az MSAL Node biztosítja az ElosztottCachePlugin osztályt, amely implementálja az ICachePlugin osztályt. A(z) DistributedCachePlugin egy példányához a következőkre van szükség:
- egy ügyféloldali felület (ICacheClient), amely implementálja
getéssetműveletet végez a perzisztenciakiszolgálón (Redis, MySQL stb.). - egy partíciókezelő (IPartitionManager), amely egy adott munkamenet-azonosítóval kapcsolatos olvasást és írást biztosít a gyorsítótárba.
A mintamegvalósításhoz lásd a DistributedCachePlugint használó webalkalmazást.
Lásd még
Az alábbi mintákból további információkat tudhat meg arról, hogyan kezelje a gyorsítótárazást az MSAL Node-alkalmazásokban: