Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Když msAL získá token, uloží ho do mezipaměti pro budoucí využití. MSAL spravuje životnosti tokenů a aktualizuje za vás. Rozhraní acquireTokenSilent() API načte přístupové tokeny z mezipaměti pro daný účet a v případě potřeby je obnoví.
Ukládání do mezipaměti
Umístění úložiště mezipaměti můžete nakonfigurovat prostřednictvím objektu konfigurace, který se používá k vytvoření instance knihovny MSAL:
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"
}
});
MSAL ve výchozím nastavení ukládá různé ověřovací artefakty, které získává od zprostředkovatele identity, do úložiště prohlížeče pomocí rozhraní Web Storage API, které podporují všechny moderní prohlížeče. MsAL proto nabízí dvě metody trvalého úložiště: sessionStorage (výchozí) a localStorage. Kromě toho msAL nabízí memoryStorage možnost, která umožňuje vyjádřit výslovný nesouhlas s ukládáním mezipaměti do úložiště prohlížeče.
| Umístění mezipaměti | Vyřešeno dne | Sdíleno mezi okny/kartami | Tok přesměrování je podporován |
|---|---|---|---|
sessionStorage |
zavření okna/karty | No | Ano |
localStorage |
zavření prohlížeče (pokud uživatel nevybral možnost zůstat přihlášen) | Ano | Ano |
memoryStorage |
aktualizace nebo navigace stránky | No | No |
Note
I když může dojít ke ztrátě stavu ověřování v úložišti relace při zavření okna nebo karty a v paměti při obnovení stránky nebo navigaci, uživatelé stále mají aktivní relaci se zprostředkovatelem identity, pokud cookie relace nevypršela, a mohou se znovu ověřit bez jakýchkoli výzev.
Volba mezi různými umístěními úložiště odráží kompromis mezi lepším uživatelským prostředím a vyšším zabezpečením. Jak uvádí tabulka výše, místní úložiště má za následek co nejlepší uživatelské prostředí, zatímco úložiště paměti poskytuje nejlepší zabezpečení, protože v úložišti prohlížeče nejsou uložené žádné citlivé informace. Další informace najdete v části věnované zabezpečení a artefaktům uloženým v mezipaměti níže.
Poznámky k LocalStorage
Od verze 4 platí, že pokud používáte umístění mezipaměti localStorage, ověřovací artefakty jsou šifrovány, pokud si uživatel při přihlášení nevybere možnost „Zůstat přihlášený“. Použitý šifrovací algoritmus je AES-GCM s použitím HKDF k odvození klíče. Základní klíč je uložen v souboru cookie relace nazvaném msal.cache.encryption.
Tento soubor cookie se při zavření instance prohlížeče (nikoli karty) automaticky odstraní, takže po ukončení relace není možné dešifrovat žádné artefakty autentizace. Tyto artefakty ověřování, jejichž platnost vypršela, budou odstraněny při příští inicializaci knihovny MSAL a uživatel se možná bude muset znovu ověřit. Umístění localStorage i nadále poskytuje zachování mezipaměti napříč kartami pro všechny uživatele, ale mezi relacemi prohlížeče se zachovává pouze u uživatelů, kteří zvolili možnost „Zůstat přihlášeni“ (KMSI).
Important
Účelem tohoto šifrování je snížit trvalost artefaktů ověřování, nikoli poskytovat další zabezpečení. Pokud by útočník získal přístup k úložišti prohlížeče, měl by také přístup ke klíči nebo by mohl vaším jménem požádat o tokeny, aniž by vůbec potřeboval mezipaměť. Je vaší zodpovědností zajistit, aby vaše aplikace nebyla zranitelná vůči útokům XSS. Další informace najdete v části zabezpečení .
Úložiště souborů cookie
Note
Ukládání do souborů cookie pro dočasné artefakty autentizace je v MSAL.js v4 zastaralé. Tato část se uchovává pro aplikace, které stále používají MSAL.js verze 3 nebo starší.
MSAL Browser lze nakonfigurovat tak, aby k ukládání dočasných artefaktů autentizace používal soubory cookie. Tato možnost umožňuje podporovat prohlížeče, které můžou vymazat místní úložiště nebo úložiště relací během toků přihlášení založených na přesměrování (např. Internet Explorer, Firefox v privátním režimu). Všimněte si, že při výběru této možnosti jsou tokeny stále uložené v prohlížeči nebo úložišti paměti. Další informace najdete v konfiguraci .
Zabezpečení
Session storage a local storage považujeme za bezpečné, dokud vaše aplikace neobsahuje zranitelnosti typu Cross-Site Scripting (XSS) a související zranitelnosti. Řiďte se prosím dokumentem OWASP XSS Prevention Cheat Sheet, který popisuje, jak zabezpečit vaše aplikace proti útokům XSS. Pokud máte stále obavy, doporučujeme místo toho použít možnost memoryStorage.
Artefakty uložené v mezipaměti
Aby MSAL umožnila efektivní získávání tokenů při zachování dobré uživatelské zkušenosti, ukládá do mezipaměti různé artefakty vznikající v důsledku volání svého rozhraní API. Níže je souhrn entit v mezipaměti MSAL:
-
Trvalé artefakty (přetrvávající i po dokončení požadavku – viz také: životnost tokenů)
- přístupové tokeny
- Tokeny ID
- obnovovací tokeny
- accounts
-
Dočasné artefakty (omezené na dobu trvání požadavku)
- metadata žádosti (např. state, nonce, autorita)
- chyby
- stav interakce
-
Telemetrie
- předchozí neúspěšná žádost
- údaje o výkonu
Note
Dočasné položky mezipaměti jsou vždy ukládány v úložišti relací nebo v paměti. MsAL se vrátí do úložiště paměti, pokud není k dispozici úložiště relací.
Note
Autorizační kód je uložen pouze v paměti a po uplatnění tokenů se zahodí.
přepsání umístění dočasné mezipaměti
Note
Možnost temporaryCacheLocation konfigurace je v MSAL.js v4 zastaralá. Tato část se uchovává pro aplikace, které stále používají MSAL.js verze 3 nebo starší.
Warning
Přepsání temporaryCacheLocation je třeba provádět s opatrností, zejména při volbě localStorage. Interakce ve více než jedné kartě nebo okně není podporovaná a neočekávaně se můžou zobrazit interaction_in_progress chyby. Toto je nouzové řešení, nikoli plně podporovaná funkce.
Při použití knihovny MSAL.js s výchozím nastavením ve scénáři, kdy je uživatel po úspěšném ověření přesměrován do nového okna nebo karty, dojde k přerušení toku OAuth 2.0 Authorization Code with PKCE. V tomto případě dojde ke ztrátě původního okna nebo karty, kde je uložený stav ověřování (ověřovatel kódu a výzva), a tok ověřování selže.
Chcete-li tuto situaci řešit, můžete nakonfigurovat MSAL tak, aby jako umístění mezipaměti používal localStorage, a to přepsáním konfigurační vlastnosti temporaryCacheLocation. To umožňuje uložit ověřovací kód a výzvu v localStorage prohlížeče, které přetrvává napříč více kartami a okny.
Trvalost mezipaměti při upgradech a rollbacku MSAL.js
Občas MSAL.js je potřeba změnit tvar artefaktů uložených v mezipaměti, aby podporovaly nové požadavky, funkce nebo opravy chyb. Co nejčastěji se tyto změny provádějí zpětně kompatibilním způsobem, aby se zajistilo, že když se aplikace upgraduje na novou verzi nebo se vrátí zpět na starší verzi, mezipaměť, která se nachází v prohlížeči uživatele, je stále možné použít. To ale není vždy možné a můžete skončit ve stavu, kdy existuje více kopií mezipaměti současně, jeden používaný aktuální verzí MSAL.js spuštěnou a jinou verzí napsanou verzí použitou před upgradem. To se provádí, aby se aplikace v případě potřeby mohly elegantně vrátit zpět. Ve velké většině upgradů MSAL.js migruje veškerou existující mezipaměť do nového formátu, aby se bezproblémový upgrade provedl. Ve výjimečných případech, jako je upgrade z verze 3 na verzi 4, to nemusí být možné kvůli požadavkům na zabezpečení nebo ochranu osobních údajů a to vždy vede k nárůstu hlavní verze.
Když dojde ke změně mezipaměti způsobující chybu, starší mezipaměť se ve výchozím nastavení uchovává po dobu 5 dnů, aby bylo možné v případě potřeby vrátit zpět. Dobu, po kterou se stará mezipaměť uchovává, je možné nakonfigurovat pomocí cacheRetentionDays konfigurace mezipaměti na PublicClientApplication. Pokud mezipaměť během této doby nebyla aktivně používána, bude při příští inicializaci MSAL.js vymazána. Pokud navíc neočekáváte, že byste se museli vrátit zpět, můžete tuto hodnotu nastavit tak, aby 0 indikovala, že stará mezipaměť by se měla vždy okamžitě odebrat po upgradu na novou verzi MSAL.js. Naopak pokud máte delší časové období zavádění pro upgrady, můžete se rozhodnout nastavit tuto hodnotu na delší hodnotu.
Note
Přístupové a obnovovací tokeny jsou odstraněny, jakmile vyprší jejich platnost, i když ještě nebylo dosaženo nakonfigurované hodnoty cacheRetentionDays.
Platné přístupové tokeny se také můžou kdykoli odebrat, pokud úložiště prohlížeče dosáhne kvóty úložiště. Po dosažení limitů úložiště se přístupové tokeny odebírají v pořadí FIFO (first in, first out), přičemž se začíná položkami vytvořenými předchozí verzí MSAL.js a poté se pokračuje položkami vytvořenými aktuální verzí MSAL.js.
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();
Poznámky
- Nedoporučujeme, aby aplikace měli obchodní logiku závislou na přímém použití entit v mezipaměti. Místo toho použijte příslušné API knihovny MSAL, pokud potřebujete získat tokeny nebo účty.
- Klíče používané k šifrování tokenů poP (proof of possession) se ukládají pomocí kombinace rozhraní API IndexedDB a úložiště paměti. Další informace najdete v tématu přístup-token-důkaz o vlastnictví.