Logga ut användare

Innan du börjar här ska du se till att du förstår hur du loggar in, hämtar token och hanterar tokenlivslängder.

Logga ut

Utloggningsprocessen för MSAL tar två steg.

  1. Rensa MSAL-cachen.
  2. Rensa sessionen på identitetsservern.

Objektet PublicClientApplication exponerar två API:er som utför dessa åtgärder.

msalInstance.logoutRedirect();
msalInstance.logoutPopup();

Dessa API:er rensar tokencacheminnet för alla användar- och sessionsdata och navigerar sedan webbläsarfönstret eller popup-fönstret till serverns utloggningssida. Servern uppmanar sedan användaren att välja det konto som de vill loggas ut från och omdirigera tillbaka till ditt postLogoutRedirectUri så länge som följande villkor uppfylls:

  1. URI:n registreras som en svars-URL för appregistreringen
  2. URI:n tillhandahålls som postLogoutRedirectUri på antingen konfigurationen PublicClientApplication eller utloggningsbegäran
  3. Användaren har en aktiv session med identitetsprovidern
  4. (MSA-scenarier) En URL för utloggning via frontkanalen är konfigurerad för appregistreringen

Om något av ovanstående villkor inte uppfylls kommer sidan (eller popup-fönstret) att finnas kvar på identitetsproviderns utloggningssida.

VIKTIGT: Om inloggningsnavigering avbryts på något sätt kan MSAL-cachen rensas, men sessionen kan fortfarande finnas kvar på servern. Se till att navigeringen är helt slutförd innan du återgår till programmet.

const msalConfig = {
    auth: {
        clientId: 'your_client_id',
        authority: 'https://login.microsoftonline.con/{your_tenant_id}',
        redirectUri: 'https://contoso.com',
        postLogoutRedirectUri: 'https://contoso.com/homepage'
    }
};

Begär objekt

Konfigurationsalternativ kan anges för var och en av utloggnings-API:erna för att anpassa beteendet:

logoutRedirect

När du använder logoutRedirect rensas den lokala cachen för användartoken och sedan omdirigeras fönstret till serverns inloggningssida. Löftet som returneras av logoutRedirect förväntas inte fullföljas, men du kan invänta det om du behöver hindra annan kod från att köras innan omdirigeringen initieras.

Du kan ange konfigurationsalternativ för att anpassa beteendet:

const currentAccount = msalInstance.getAccount({ homeAccountId });
await msalInstance.logoutRedirect({
    account: currentAccount,
    postLogoutRedirectUri: "https://contoso.com/loggedOut"
});

Hoppar över serverns utloggning

Varning

Om du hoppar över serverns utloggning innebär det att användarens session förblir aktiv på servern och kan loggas in i programmet igen utan att ange autentiseringsuppgifterna igen.

Om du vill att programmet bara ska utföra lokal utloggning kan du ange ett återanrop till parametern onRedirectNavigate på begäran och få återanropet att returnera falskt.

msalInstance.logoutRedirect({
    onRedirectNavigate: (url) => {
        // Return false if you would like to stop navigation after local logout
        return false;
    }
});

logoutPopup

logoutPopup API:et öppnar serverns inloggningssida i ett popup-fönster så att programmet kan behålla sitt aktuella tillstånd. På grund av detta finns det några ytterligare saker att tänka på utöver logoutRedirect när du väljer att använda popup-fönster för att logga ut:

  • Löftet som returneras av logoutPopup förväntas uppfyllas efter att popup-fönstret har stängts
  • postLogoutRedirectUri krävs för att MSAL ska kunna stänga popup-fönstret när inloggningen är klar
  • postLogoutRedirectUri öppnas i popup-fönstret, inte i huvudramen. Om du behöver att din toppnivåapp omdirigeras efter utloggningen kan du använda parametern mainWindowRedirectUri i utloggningsbegäran.

Du kan ange konfigurationsalternativ för att anpassa beteendet.

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
        }
    }
});

Utloggning utan bekräftelse

Om ditt klientprogram har det valfria anspråket login_hint aktiverat för ID-tokener kan du använda anspråket login_hint i ID-tokenen för att utföra en "tyst" utloggning eller en utloggning utan uppmaning med antingen logoutRedirect eller logoutPopup. Det finns två sätt att uppnå en snabb utloggning:

Alternativ 1: Låt MSAL automatiskt parsa login_hint från kontots ID-tokenanspråk

Det första och enklaste alternativet är att ange det kontoobjekt som du vill avsluta sessionen för till utloggnings-API:et. MSAL kontrollerar om anspråket login_hint finns i kontots ID-token och lägger automatiskt till det i begäran om att avsluta session som logout_hint för att hoppa över prompten för kontoväljaren.

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});

Alternativ 2: Ange alternativet logoutHint manuellt i utloggningsbegäran

Alternativt, om du föredrar att manuellt ange logoutHint, kan du extrahera anspråket login_hint i din app och ställa in det som logoutHint i utloggningsbegäran:

const currentAccount = msalInstance.getAccount({ homeAccountId });

// Extract login hint to use as logout hint
const logoutHint = currentAccount.idTokenClaims.login_hint;
await msalInstance.logoutPopup({ logoutHint: logoutHint });

Obs! Beroende på vilket API du väljer (omdirigering/popup-fönster) omdirigeras appen fortfarande eller öppnar ett popup-fönster för att avsluta serversessionen. Skillnaden är att användaren inte ser eller behöver interagera med serverns kontoväljare.

Utloggning för frontkanal

Microsoft Entra ID och Azure AD B2C stöder utloggningsfunktionen för OAuth-frontkanalen, som möjliggör enkel utloggning i alla program när en användare initierar utloggning. Utför följande steg för att dra nytta av den här funktionen med MSAL.js:

  1. Skapa en dedikerad utloggningssida i ditt program. Den här sidan bör inte utföra någon annan funktion, till exempel att hämta token vid sidinläsning (se nedan för mer information). Observera att den här sidan kommer att läsas in i en dold iframe och, för användare av Microsoft Entra ID och MSA, kommer att innehålla query-parametrarna iss och sid.
  2. I Microsoft Entra administrationscenter går du till sidan Autentisering för ditt program och registrerar sidan från steg ett under Url för utloggning i Front-channel. Observera att den här sidan måste laddas via https.

Krav för utloggningssida för frontkanal

Den sida som används för utloggning på frontkanalen bör skapas på följande sätt:

  1. När sidan läses in anropas MSAL logoutRedirect API automatiskt.
  2. I konfigurationen PublicClientApplication ställer du in system.allowRedirectInIframetrue.
  3. När du anropar logoutrekommenderar vi att du förhindrar omdirigeringen i iframe till utloggningssidan (se ovan).

Exempel:

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;
    }
});

När en användare nu loggar ut från en annan applikation laddas din applikations URL för utloggning via front-channel i en dold iframe, och MSAL.js rensar sin cache för att slutföra enkel utloggning.

Note

Utloggning via frontkanalen stöds inte alltid i webbläsare. Chromium aktiverade lagringspartitionering, och Firefox stöder en liknande standard som begränsar applikationer från att utföra utloggning via frontkanalen. Officiell Entra-dokumentation om det här avsnittet finns i Begränsningar för inloggning på frontkanalen utan cookies från tredje part.

Exempel på utloggning via frontkanal

Följande exempel visar hur du implementerar utloggning på frontkanalen med hjälp av MSAL.js:

Events

Om olika delar av din app behöver reagera på utloggningsstatusen utan direkt åtkomst till det löfte som returneras av logoutRedirect eller logoutPopup kan du använda händelse-API:t.

Händelser genereras när utloggningen lyckas eller misslyckas och när popup-fönstret öppnas när du använder logoutPopup.

Viktiga anteckningar

  • Om inget konto skickas till utloggnings-API:et eller inget EndSessionRequest-objekt loggas det ut från alla konton.
  • Om ett konto skickas till utloggnings-API:et rensar MSAL endast token som är relaterade till det kontot.
  • Utloggning från servern är en bekvämlighetsfunktion och utförs därför i mån av möjlighet. Utloggnings-API:er löser problemet så länge det lokala programcacheminnet har rensats, oavsett om serversigneringen lyckas eller inte.

Nästa steg

Gå in på mer avancerade ämnen, till exempel: