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.
Než začnete tady, ujistěte se, že rozumíte tomu, jak se přihlásit, získat tokeny a spravovat životnost tokenů.
Odhlašování
Proces odhlášení v MSAL má dva kroky.
- Vymažte mezipaměť MSAL.
- Vymažte relaci na serveru identity.
Objekt PublicClientApplication zveřejňuje dvě rozhraní API, která tyto akce provádějí.
msalInstance.logoutRedirect();
msalInstance.logoutPopup();
Tato rozhraní API vymažou mezipaměť tokenů i veškerá uživatelská a relační data a poté přesměrují okno prohlížeče nebo vyskakovací okno na odhlašovací stránku serveru. Server pak vyzve uživatele, aby vybral účet, ze kterých se má odhlásit, a přesměrovat ho zpět na vaši postLogoutRedirectUri adresu, pokud jsou splněny následující podmínky:
- Identifikátor URI je zaregistrovaný jako adresa URL odpovědi při registraci aplikace.
- Identifikátor URI se zadává jako
postLogoutRedirectUribuď v konfiguraciPublicClientApplication, nebo v žádosti o odhlášení. - Uživatel má aktivní relaci se zprostředkovatelem identity.
- (Scénáře MSA) V registraci aplikace je nakonfigurována adresa URL pro odhlášení front-channel.
Pokud některá z výše uvedených podmínek není splněná, stránka (nebo automaticky otevírané okno) zůstane na stránce odhlášení zprostředkovatele identity.
DŮLEŽITÉ: Pokud je tato navigace při odhlašování jakkoli přerušena, může se vymazat cache MSAL, ale relace může na serveru stále přetrvávat. Než se vrátíte do aplikace, ujistěte se, že se navigace úplně dokončí.
const msalConfig = {
auth: {
clientId: 'your_client_id',
authority: 'https://login.microsoftonline.con/{your_tenant_id}',
redirectUri: 'https://contoso.com',
postLogoutRedirectUri: 'https://contoso.com/homepage'
}
};
Objekty požadavku
Možnosti konfigurace je možné poskytnout jednotlivým rozhraním API pro odhlášení a přizpůsobit chování:
logoutRedirect
Použití logoutRedirect vymaže místní mezipaměť tokenů uživatele a pak přesměruje okno na stránku odhlašování serveru. Příslib vrácený logoutRedirect není očekávaným řešením, ale můžete ho očekávat, pokud potřebujete před zahájením přesměrování zablokovat spuštění jiného kódu.
Možnosti konfigurace je možné poskytnout pro přizpůsobení chování:
const currentAccount = msalInstance.getAccount({ homeAccountId });
await msalInstance.logoutRedirect({
account: currentAccount,
postLogoutRedirectUri: "https://contoso.com/loggedOut"
});
Přeskočení odhlášení ze serveru
Warning
Přeskočení odhlašování serveru znamená, že relace uživatele zůstane aktivní na serveru a může být přihlášena zpět k vaší aplikaci bez opětovného zadání přihlašovacích údajů.
Pokud chcete, aby vaše aplikace prováděla pouze místní odhlášení, můžete v požadavku předat parametru onRedirectNavigate callback a nechat tento callback vrátit hodnotu false.
msalInstance.logoutRedirect({
onRedirectNavigate: (url) => {
// Return false if you would like to stop navigation after local logout
return false;
}
});
logoutPopup
Rozhraní logoutPopup API otevře přihlašovací stránku serveru v automaticky otevíraném okně, což vaší aplikaci umožní zachovat aktuální stav. Z tohoto důvodu je třeba vzít v úvahu několik dalších aspektů oproti logoutRedirect při rozhodování, zda pro odhlášení použít vyskakovací okna:
- Po zavření automaticky otevíraných oken se očekává, že se příslib vrácený
logoutPopupřešením vyřeší. -
postLogoutRedirectUrivyžaduje se, aby služba MSAL mohla po dokončení registrace zavřít automaticky otevírané okno. -
postLogoutRedirectUrise otevře v automaticky otevírané okno, ne v hlavním rámečku. Pokud potřebujete, aby se vaše aplikace nejvyšší úrovně po odhlášení přesměrovala, můžete použítmainWindowRedirectUriparametr v žádosti o odhlášení.
Pro přizpůsobení chování je možné zadat možnosti konfigurace.
const currentAccount = msalInstance.getAccount({ homeAccountId });
await msalInstance.logoutPopup({
account: currentAccount,
postLogoutRedirectUri: "https://contoso.com/loggedOut",
mainWindowRedirectUri: "https://contoso.com/homePage",
popupWindowAttributes: {
popupSize: {
height: 100,
width: 100
},
popupPosition: {
top: 100,
left: 100
}
}
});
Odhlášení bez výzvy
Pokud má vaše klientská aplikace pro tokeny ID povolený volitelný claim login_hint, můžete využít claim login_hint tokenu ID k provedení „tichého“ odhlášení nebo odhlášení bez výzvy při použití buď logoutRedirect, nebo logoutPopup. Existují dva způsoby, jak dosáhnout bezobžávného odhlášení:
Možnost 1: Umožňuje službě MSAL automaticky parsovat login_hint z deklarací identity tokenu ID účtu.
První a nejjednodušší možností je předat rozhraní API pro odhlášení objekt účtu, pro který chcete relaci ukončit. MSAL zkontroluje, zda je deklarace login_hint k dispozici v ID tokenu účtu, a automaticky ji přidá do žádosti o ukončení relace jako logout_hint, aby se přeskočila výzva k výběru účtu.
const currentAccount = msalInstance.getAccount({ homeAccountId });
// The account's ID Token must contain the login_hint optional claim to avoid the account picker
await msalInstance.logoutRedirect({ account: currentAccount});
Možnost 2: Ruční nastavení možnosti logoutHint v žádosti o odhlášení
Případně, pokud dáváte přednost ručnímu nastavení logoutHint, můžete v aplikaci extrahovat claim login_hint a nastavit jej jako logoutHint v požadavku na odhlášení:
const currentAccount = msalInstance.getAccount({ homeAccountId });
// Extract login hint to use as logout hint
const logoutHint = currentAccount.idTokenClaims.login_hint;
await msalInstance.logoutPopup({ logoutHint: logoutHint });
Poznámka: V závislosti na zvoleném rozhraní API (přesměrování nebo automaticky otevírané okno) bude aplikace i nadále přesměrovávat nebo otevírat automaticky otevírané okno k ukončení relace na serveru. Rozdíl je v tom, že uživatel neuvidí výzvu serveru k výběru účtu ani s ní nebude muset nijak interagovat.
Odhlášení z front-channelu
Microsoft Entra ID a Azure AD B2C podporují funkci odhlášení front-channel protokolu OAuth, která umožňuje jednotné odhlášení ve všech aplikacích, když uživatel zahájí odhlášení. Pokud chcete tuto funkci využít s MSAL.js, proveďte následující kroky:
- V aplikaci vytvořte vyhrazenou stránku odhlášení. Tato stránka by neměla provádět žádnou jinou funkci, například získání tokenů při načtení stránky (podrobnosti najdete níže). Poznámka: Tato stránka se načte ve skrytém prvku iframe a pro uživatele Microsoft Entra ID a MSA bude obsahovat parametry dotazu
issasid. - V Centrum pro správu Microsoft Entra přejděte na stránku Ověřování pro vaši aplikaci a zaregistrujte stránku z kroku 1 v části Adresa URL odhlášení z front-channelu. Poznámka: Tato stránka musí být načtena přes
https.
Požadavky na stránku pro odhlášení front-channel
Stránka použitá pro odhlášení z front-channel by měla být sestavena takto:
- Při načtení stránky automaticky vyvoláte rozhraní MSAL
logoutRedirectAPI. -
PublicClientApplicationV konfiguraci nastavtesystem.allowRedirectInIframehodnotutrue. - Při vyvolání
logoutdoporučujeme zabránit přesměrování v prvku iframe na stránku odhlášení (viz výše).
Příklad:
const msal = new PublicClientApplication({
auth: {
clientId: "my-client-id"
},
system: {
allowRedirectInIframe: true
}
})
// Automatically on page load
msal.logoutRedirect({
onRedirectNavigate: () => {
// Return false to stop navigation after local logout
return false;
}
});
Nyní, když se uživatel odhlásí z jiné aplikace, adresa URL pro odhlášení front-channel vaší aplikace se načte do skrytého rámce iframe a MSAL.js vymaže svou mezipaměť, aby dokončil jednotné odhlášení.
Note
Odhlášení přes front-channel není vždy podporováno ve všech prohlížečích. Chromium zavedl partitioning úložiště a Firefox podporuje podobný standard, který omezuje aplikace při provádění odhlášení přes front-channel. Oficiální dokumentaci k tomuto tématu v Entra najdete v článku Omezení front-channel odhlášení bez souborů cookie třetích stran.
Ukázky odhlášení z front-channelu
Následující ukázky ukazují, jak implementovat odhlášení front-channel pomocí MSAL.js:
- MSAL Angular v2: Ukázka Angular 11
- MSAL React: Ukázka směrovače React
Události
Pokud různé části vaší aplikace potřebují reagovat na stav odhlášení, aniž by měly přímý přístup k objektu Promise vrácenému funkcí logoutRedirect nebo logoutPopup, můžete použít API událostí.
Události budou vyvolány, když se odhlášení podaří nebo nezdaří a když se při použití logoutPopup otevře vyskakovací okno.
Důležité poznámky
- Pokud se do rozhraní API pro odhlášení nepředá žádný účet nebo žádný objekt EndSessionRequest, odhlásí se ze všech účtů.
- Pokud se do rozhraní API pro odhlášení předá účet, služba MSAL vymaže pouze tokeny související s tímto účtem.
- Odhlášení ze serveru je funkce pro usnadnění, a proto se provádí podle nejlepších možností. API pro odhlášení budou považována za úspěšně dokončená, pokud byla úspěšně vymazána lokální mezipaměť aplikace, bez ohledu na to, zda se odhlášení na serveru podaří, nebo ne.
Další kroky
Podívejte se na pokročilejší témata, například: