Gyorsítótárazás az MSAL.js-ben

Amikor az MSAL lekér egy tokent, gyorsítótárazza azt későbbi felhasználás céljából. Az MSAL kezeli a tokenek élettartamát és megújítását. Az acquireTokenSilent() API lekéri a hozzáférési jogkivonatokat egy adott fiók gyorsítótárából, és szükség esetén megújítja őket.

Gyorsítótár-tároló

A gyorsítótár tárolási helyét az MSAL példányosításához használt konfigurációs objektumon keresztül konfigurálhatja:

import { PublicClientApplication, BrowserCacheLocation } from "@azure/msal-browser";

const pca = new PublicClientApplication({
    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),
        redirectUri: "/"
    },
    cache: {
       cacheLocation: BrowserCacheLocation.SessionStorage // "sessionStorage"
    }
});

Az MSAL alapértelmezés szerint az idP-ből beszerzett különböző hitelesítési összetevőket a böngészőtárolóban tárolja az összes modern böngésző által támogatott Web Storage API használatával. Ennek megfelelően az MSAL két állandó tárolási módszert kínál: sessionStorage (alapértelmezett) és localStorage. Az MSAL emellett lehetőséget is biztosít memoryStorage , amely lehetővé teszi a gyorsítótár böngészőtárolóban való tárolásának letiltását.

Gyorsítótár helye Törlés bekapcsolva Megosztva az ablakok/lapok között Az átirányítási folyamat támogatása biztosított
sessionStorage ablak/lap bezárása No Igen
localStorage a böngésző bezárásakor (hacsak a felhasználó nem jelölte be a „Maradjak bejelentkezve” lehetőséget) Igen Igen
memoryStorage oldalfrissítés/navigáció No No

Note

Bár a hitelesítési állapot elveszhet a munkamenetben és a memóriatárolóban az ablak/lap bezárása vagy az oldalfrissítés/navigáció miatt, a felhasználók továbbra is aktív munkamenetben vannak az identitásszolgáltatóval, feltéve, hogy a munkamenet-cookie nem járt le, és kérések nélkül újra hitelesíthetők.

A különböző tárolási helyek közötti választás a jobb felhasználói élmény és a nagyobb biztonság közötti kompromisszumot tükrözi. Ahogy a fenti táblázat is mutatja, a helyi tárolás a lehető legjobb felhasználói élményt eredményezi, míg a memóriatároló a legjobb biztonságot nyújtja, mivel a böngészőben nem tárol bizalmas információkat. További információért tekintse meg az alábbi, a biztonságról és a gyorsítótárazott artefaktumokról szóló szakaszt.

LocalStorage megjegyzések

A 4-es verziótól kezdve, ha a gyorsítótár helyét használja, a rendszer titkosítja a localStorage hitelesítési összetevőket, kivéve, ha a felhasználó a bejelentkezés során a "Bejelentkezve szeretnék maradni" lehetőséget választja. A használt titkosítási algoritmus az AES-GCM , amely a HKDF-t használja a kulcs lekövetéséhez. Az alapkulcsot a rendszer egy munkamenet-cookie-ban msal.cache.encryptiontárolja.

Ez a cookie automatikusan törlődik a böngészőpéldány (nem lap) bezárásakor, így a munkamenet befejezése után nem lehet visszafejteni a hitelesítési összetevőket. A rendszer eltávolítja ezeket a lejárt hitelesítési összetevőket az MSAL következő inicializálásakor, és előfordulhat, hogy a felhasználónak újra meg kell adnia a hitelesítést. A localStorage hely továbbra is több lapból álló gyorsítótár-megőrzést biztosít az összes felhasználó számára, de csak a böngésző-munkamenetek között marad meg a "Bejelentkezés megtartása" (KMSI) lehetőséget választó felhasználók számára.

Important

A titkosítás célja a hitelesítési összetevők megőrzésének csökkentése, nem pedig a további biztonság biztosítása. Ha egy rosszindulatú szereplő hozzáfér a böngésző tárhelyéhez, akkor a kulcshoz is hozzáférhet, vagy az Ön nevében tokeneket kérhet anélkül, hogy egyáltalán szüksége lenne a gyorsítótárra. Az Ön felelőssége, hogy az alkalmazás ne legyen sebezhető az XSS-támadásokkal szemben. További információért tekintse meg a biztonsági szakaszt.

Note

Az ideiglenes hitelesítési összetevők cookie-tárolója elavult a MSAL.js 4-es verzióban. Ez a szakasz megmarad a MSAL.js v3-at vagy korábbi verziót használó alkalmazások esetében.

Az MSAL Browser konfigurálható úgy, hogy cookie-kat használjon az ideiglenes hitelesítési összetevők tárolásához. Ezzel a beállítással támogathatja azokat a böngészőket, amelyek az átirányításalapú bejelentkezési folyamatok (pl. Internet Explorer, Privát módban a Firefox) során törölhetik a helyi/munkamenet-tárterületet. Vegye figyelembe, hogy ha ezt a lehetőséget választja, maguk a tokenek továbbra is a böngésző tárhelyén vagy a memóriában lesznek tárolva. További információért tekintse meg a konfigurációt .

Biztonság

Biztonságosnak tartjuk a munkamenet-/helyi tárolást mindaddig, amíg az alkalmazás nem rendelkezik helyek közötti szkriptkészítéssel (XSS) és a kapcsolódó biztonsági résekkel. Tekintse meg az OWASP XSS-megelőzési csalilapot az alkalmazások XSS-sel szembeni védelméhez. Ha továbbra is aggódik, javasoljuk, hogy inkább használja a memoryStorage lehetőséget.

Gyorsítótárazott összetevők

A tokenek hatékony lekérése és a jó felhasználói élmény fenntartása érdekében az MSAL gyorsítótárazza az API-hívásai során keletkező különféle elemeket. Az alábbiakban az MSAL-gyorsítótárban lévő entitások összegzése látható:

  • Tartós artefaktumok (a kérés befejezése után is fennmaradnak – lásd még: tokenek élettartama)
    • hozzáférési jogkivonatok
    • azonosító tokenek
    • frissítési tokenek
    • accounts
  • Rövid élettartamú összetevők (a kérelem élettartamára korlátozva)
    • metaadatok kérése (pl. állapot, nem ce, hatóság)
    • Hibák
    • interakció állapota
  • Telemetria
    • előző sikertelen kérés
    • teljesítményadatok

Note

Az ideiglenes gyorsítótárbejegyzések mindig a munkamenet-tárolóban vagy a memóriában vannak tárolva. Az MSAL a memóriatárolót használja, ha a munkamenet-tárolás nem érhető el.

Note

Az engedélyezési kódot csak a memóriában tárolják, és a tokenekre történő beváltás után eldobják.

temporaryCacheLocation felülírása

Note

A temporaryCacheLocation konfigurációs beállítás elavult a MSAL.js v4-ben. Ez a szakasz megmarad a MSAL.js v3-at vagy korábbi verziót használó alkalmazások esetében.

Warning

A(z) temporaryCacheLocation felülírásakor körültekintően kell eljárni, különösen a(z) localStorage kiválasztásakor. A több lapon/ablakban történő interakció nem támogatott, és váratlanul hibaüzenetek jelenhetnek meg interaction_in_progress . Ez egy menekülési nyílás, nem teljes mértékben támogatott funkció.

Ha MSAL.js használ az alapértelmezett konfigurációval olyan forgatókönyvben, amelyben a rendszer átirányítja a felhasználót a sikeres hitelesítés után egy új ablakban vagy lapon, az OAuth 2.0 engedélyezési kód és a PKCE-folyamat megszakad. Ebben az esetben az eredeti ablak vagy lap, ahol a hitelesítési állapot (kódhitelesítő és feladat) tárolódik, elveszik, és a hitelesítési folyamat meghiúsul.

A forgatókönyv kezeléséhez úgy konfigurálhatja az MSAL-t, hogy a temporaryCacheLocation konfigurációs tulajdonság felülbírálásával a localStorage elemet használja gyorsítótár-helyként. Ez lehetővé teszi a kód hitelesítőjének és feladatának tárolását a böngészőben localStorage, amely több lapon és ablakban is állandó.

Gyorsítótár-megőrzés MSAL.js frissítések és visszaállítások során

Időnként MSAL.js módosítania kell a gyorsítótárazott összetevők alakját az új követelmények, funkciók vagy hibajavítások támogatásához. Ezeket a módosításokat a lehető leggyakrabban visszafelé kompatibilis módon hajtják végre, így biztosítva, hogy amikor egy alkalmazás frissít egy új verzióra, vagy visszatér egy régebbi verzióra, a felhasználó böngészőjében található gyorsítótár továbbra is használható legyen. Ez azonban nem mindig lehetséges, és előfordulhat, hogy olyan állapotba kerül, amelyben egyszerre több másolat is létezik a gyorsítótárról, az egyiket a MSAL.js aktuális verziója használja, a másikat pedig a frissítés előtt használt verzió írta. Erre azért van szükség, hogy az alkalmazások szükség esetén zökkenőmentesen visszaállhassanak. A frissítések túlnyomó többségében MSAL.js minden meglévő gyorsítótárat áttelepít az új formátumba a zökkenőmentes frissítési élmény érdekében. Ritkán, például a 3-as verzióról a 4-es verzióra való frissítés, ez biztonsági vagy adatvédelmi követelmények miatt nem lehetséges, és ez mindig a főverziók ütközését eredményezi.

A feltört gyorsítótár módosításakor a rendszer alapértelmezés szerint 5 napig megőrzi a régebbi gyorsítótárat, hogy szükség esetén lehetővé tegye a visszaállítást. A régi gyorsítótár megőrzési ideje a(z) PublicClientApplication rendszeren található cacheRetentionDays gyorsítótár-beállítással konfigurálható. Ha a gyorsítótárat ez idő alatt nem használták aktívan, akkor a rendszer törli a következő MSAL.js inicializálásakor. Emellett, ha várhatóan nem lesz szükség visszaállásra, beállíthatja ezt az értéket 0 értékre annak jelzésére, hogy a régi gyorsítótárat az MSAL.js új verziójára való frissítéskor mindig azonnal el kell távolítani. Ezzel szemben, ha hosszabb bevezetési időszak áll rendelkezésére a frissítésekhez, dönthet úgy, hogy hosszabb értékre állítja be.

Note

A hozzáférési és frissítési jogkivonatok a lejártuk után is törlődnek, még akkor is, ha a konfigurált cacheRetentionDays még nem lett elérve. Az érvényes hozzáférési jogkivonatok bármikor eltávolíthatók, ha a böngészőtároló eléri a tárkvótát. Amikor a tárolási kvóták betelnek, a hozzáférési tokenek érkezési sorrendben (FIFO-elv szerint) kerülnek eltávolításra, kezdve az MSAL.js egy korábbi verziója által írt bejegyzésekkel, majd az MSAL.js aktuális verziója által írt bejegyzésekkel folytatva.

const config = {
    auth: {
        clientId: "<your-client-id>"
    },
    cache: {
        cacheLocation: "localStorage",
        cacheRetentionDays: 0 // Set this to the number of days you want old cache to be preserved in the event a rollback is needed (Default 5 days)
    }
}

const pca = new PublicClientApplication(config);
await pca.initialize();

Megjegyzések

  • Nem javasoljuk az olyan alkalmazásokat, amelyek üzleti logikája a gyorsítótárban lévő entitások közvetlen használatától függ. Ehelyett használja a megfelelő MSAL API-t, amikor tokeneket kell beszereznie vagy fiókokat kell lekérnie.
  • A birtoklási igazolási (PoP) jogkivonatok titkosításához használt kulcsok az IndexedDB API és a memóriatároló kombinációjával vannak tárolva. További információkért tekintse meg a hozzáférési jogkivonat-igazolást a birtoklásról.

További információk