Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
- Rensa MSAL-cachen.
- 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:
- URI:n registreras som en svars-URL för appregistreringen
- URI:n tillhandahålls som
postLogoutRedirectUripå antingen konfigurationenPublicClientApplicationeller utloggningsbegäran - Användaren har en aktiv session med identitetsprovidern
- (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
logoutPopupförväntas uppfyllas efter att popup-fönstret har stängts -
postLogoutRedirectUrikrä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 parameternmainWindowRedirectUrii 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:
- 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
issochsid. - 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:
- När sidan läses in anropas MSAL
logoutRedirectAPI automatiskt. - I konfigurationen
PublicClientApplicationställer du insystem.allowRedirectInIframepåtrue. - 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:
- MSAL Angular v2: Angular 11-exempel
- MSAL React: React Router-exempel
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: