Odhlášení uživatelů

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.

  1. Vymažte mezipaměť MSAL.
  2. 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:

  1. Identifikátor URI je zaregistrovaný jako adresa URL odpovědi při registraci aplikace.
  2. Identifikátor URI se zadává jako postLogoutRedirectUri buď v konfiguraci PublicClientApplication, nebo v žádosti o odhlášení.
  3. Uživatel má aktivní relaci se zprostředkovatelem identity.
  4. (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ší.
  • postLogoutRedirectUri vyžaduje se, aby služba MSAL mohla po dokončení registrace zavřít automaticky otevírané okno.
  • postLogoutRedirectUri se 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žít mainWindowRedirectUri parametr 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:

  1. 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 iss a sid.
  2. 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:

  1. Při načtení stránky automaticky vyvoláte rozhraní MSAL logoutRedirect API.
  2. PublicClientApplication V konfiguraci nastavte system.allowRedirectInIframe hodnotu true.
  3. 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:

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: