Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Mielőtt elkezdené, győződjön meg arról, hogy ismeri a bejelentkezést, a jogkivonatok beszerzését és a jogkivonatok élettartamának kezelését.
Kijelentkezés
Az MSAL bejelentkezési folyamata két lépést tesz meg.
- Törölje az MSAL-gyorsítótárat.
- Törölje a munkamenetet az identitáskiszolgálón.
Az PublicClientApplication objektum két API-t tesz elérhetővé, amelyek végrehajtják ezeket a műveleteket.
msalInstance.logoutRedirect();
msalInstance.logoutPopup();
Ezek az API-k törlik a felhasználói és munkamenetadatokhoz tartozó tokenek gyorsítótárát, majd a böngészőablakot vagy a felugró ablakot a kiszolgáló kijelentkezési oldalára irányítják át. A kiszolgáló ezután megkéri a felhasználót, hogy válassza ki, melyik fiókból szeretne kijelentkezni, majd visszairányítja az Ön postLogoutRedirectUri elemére, amennyiben a következő feltételek teljesülnek:
- Az URI válasz URL-címként van regisztrálva az alkalmazásregisztrációban
- Az URI a
postLogoutRedirectUriformájában van megadva vagy aPublicClientApplicationkonfigurációban, vagy a kijelentkezési kérésben - A felhasználó aktív munkamenetet folytatott az identitásszolgáltatóval
- (MSA-forgatókönyvek) Az alkalmazásregisztrációban az első csatorna bejelentkezési URL-címe van konfigurálva
Ha a fenti feltételek valamelyike nem teljesül, a lap (vagy az előugró ablak) az identitásszolgáltató kijelentkezési oldalán marad.
FONTOS: Ha a kijelentkezés navigációja bármilyen módon megszakad, előfordulhat, hogy az MSAL-gyorsítótár törlődik, de a munkamenet továbbra is megmaradhat a kiszolgálón. Mielőtt visszatér az alkalmazáshoz, győződjön meg arról, hogy a navigáció teljes mértékben befejeződik.
const msalConfig = {
auth: {
clientId: 'your_client_id',
authority: 'https://login.microsoftonline.con/{your_tenant_id}',
redirectUri: 'https://contoso.com',
postLogoutRedirectUri: 'https://contoso.com/homepage'
}
};
Objektumok kérése
A viselkedés testreszabásához konfigurációs beállításokat adhat meg az egyes kijelentkezési API-knak:
logoutRedirect
A logoutRedirect használata törli a felhasználói tokenek helyi gyorsítótárát, majd átirányítja az ablakot a kiszolgáló kijelentkezési oldalára. A logoutRedirect által visszaadott Promise várhatóan nem teljesül, de meg is várhatja, ha meg szeretné akadályozni, hogy más kód fusson az átirányítás elindítása előtt.
A viselkedés testreszabásához konfigurációs beállításokat is megadhat:
const currentAccount = msalInstance.getAccount({ homeAccountId });
await msalInstance.logoutRedirect({
account: currentAccount,
postLogoutRedirectUri: "https://contoso.com/loggedOut"
});
A kiszolgáló kijelentkezésének kihagyása
Warning
A kiszolgálói kijelentkezés kihagyása azt jelenti, hogy a felhasználó munkamenete aktív marad a kiszolgálón, és a hitelesítő adatok ismételt megadása nélkül is bejelentkezhet az alkalmazásba.
Ha azt szeretné, hogy az alkalmazás csak helyi kijelentkezést hajtson végre, a kérésben megadhat egy callbacket a onRedirectNavigate paraméterhez, és beállíthatja, hogy a callback false értéket adjon vissza.
msalInstance.logoutRedirect({
onRedirectNavigate: (url) => {
// Return false if you would like to stop navigation after local logout
return false;
}
});
logoutPopup
Az logoutPopup API egy előugró ablakban nyitja meg a kiszolgáló bejelentkezési oldalát, így az alkalmazás megtarthatja az aktuális állapotát. Emiatt további szempontokat is figyelembe kell venni logoutRedirect , amikor az előugró ablakokat választja a kijelentkezéshez:
- Az előugró ablak bezárása után a visszaadott
logoutPopupígéret várhatóan feloldódik -
postLogoutRedirectUriszükséges ahhoz, hogy az MSAL bezárhassa az előugró ablakokat, amikor a kijelentkezés befejeződött -
postLogoutRedirectUriaz előugró ablakban nyílik meg, nem a fő keretben. Ha a kijelentkezés után át kell irányítania a legfelső szintű alkalmazást, használhatja amainWindowRedirectUriparamétert a bejelentkezési kérelemben.
A viselkedés testreszabásához konfigurációs beállításokat is megadhat.
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
}
}
});
Gyors kijelentkezés
Ha az ügyfélalkalmazásban engedélyezve van az ID-tokenekhez tartozó login_hint opcionális igény, akkor az ID-token login_hint igényét felhasználva „csendes” vagy kérés nélküli kijelentkezést végezhet a logoutRedirect vagy a logoutPopup használatával. A gyors kijelentkezés kétféleképpen érhető el:
1. lehetőség: Hagyja, hogy az MSAL automatikusan kinyerje a login_hint értéket a fiók azonosító tokenjének jogcímeiből
Az első és legegyszerűbb lehetőség az, hogy megadja a bejelentkezési API-nak azt a fiókobjektumot, amelyhez be szeretné fejezni a munkamenetet. Az MSAL ellenőrzi, hogy a login_hint jogcímadat elérhető-e a fiók ID-tokenjében, és automatikusan hozzáadja azt a munkamenet-lezárási kérés végéhez logout_hint formában, hogy kihagyja a fiókválasztó ablakot.
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});
2. lehetőség: A logoutHint beállítás manuális beállítása a kijelentkezési kérelemben
Alternatív megoldásként, ha manuálisan szeretné beállítani a logoutHint értékét, kinyerheti a login_hint claimet az alkalmazásából, és beállíthatja azt a logoutHint értékeként a kijelentkezési kérelemben:
const currentAccount = msalInstance.getAccount({ homeAccountId });
// Extract login hint to use as logout hint
const logoutHint = currentAccount.idTokenClaims.login_hint;
await msalInstance.logoutPopup({ logoutHint: logoutHint });
Megjegyzés: A választott API-tól (átirányítás/előugró ablak) függően az alkalmazás továbbra is átirányít vagy megnyit egy előugró ablakot a kiszolgálói munkamenet leállításához. A különbség az, hogy a felhasználó nem látja vagy nem kell használnia a kiszolgáló fiókválasztó üzenetét.
Előtércsatornás kijelentkeztetés
A Microsoft Entra ID és az Azure AD B2C támogatja az OAuth front channeles kijelentkezési funkciót, amely lehetővé teszi az összes alkalmazásra kiterjedő egyszeri kijelentkezést, amikor egy felhasználó kijelentkezést kezdeményez. Ahhoz, hogy kihasználja ezt a funkciót az MSAL.js használatával, hajtsa végre a következő lépéseket:
- Az alkalmazásban hozzon létre egy dedikált bejelentkezési lapot. Ez az oldal nem szabad, hogy semmilyen más műveletet végezzen, például tokeneket szerezzen be az oldal betöltésekor (a részletekért lásd alább). Vegye figyelembe, hogy ez az oldal egy rejtett iframe-ben fog betöltődni, és a Microsoft Entra ID- és MSA-felhasználók esetében tartalmazni fogja a
isséssidlekérdezési paramétereket. - A Microsoft Entra felügyeleti központban nyissa meg az alkalmazásához tartozó Hitelesítés lapot, majd regisztrálja az első lépésben szereplő oldalt a Front-channel kijelentkezési URL-cím alatt. Figyelem, ezt az oldalt a(z)
httpshasználatával kell betölteni.
Az előtérbeli bejelentkezési oldal követelményei
Az előtérbeli kijelentkezéshez használt lapot az alábbiak szerint kell létrehozni:
- Oldalbetöltés esetén automatikusan hívja meg az MSAL
logoutRedirectAPI-t. - A
PublicClientApplicationkonfigurációban állítsa a(z)system.allowRedirectInIframeértékéttrueértékre. - A meghíváskor
logoutjavasoljuk, hogy megakadályozza az iframe-beli átirányítást a kijelentkezési lapra (lásd fent).
Example:
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;
}
});
Most, amikor egy felhasználó kijelentkezik egy másik alkalmazásból, az alkalmazás előtérbeli bejelentkezési URL-címe egy rejtett iframe-be lesz betöltve, és MSAL.js törli a gyorsítótárát az egyszeri kijelentkezés befejezéséhez.
Note
Az előtérbeli kijelentkezés nem mindig támogatott a böngészőkben. A Chromium engedélyezte a tárolóparticionálást, a Firefox pedig egy hasonló szabványt támogat, amely korlátozza az alkalmazások lehetőségét a front-channel kijelentkeztetés végrehajtására. A témakör hivatalos Entra-dokumentációját a külső cookie-k nélküli, előtérbeli kijelentkezés korlátozásai című témakörben találja.
Példák a front-channel kijelentkezésre
Az alábbi minták bemutatják, hogyan implementálhatók az előtérbeli kijelentkezések az MSAL.jshasználatával:
- MSAL Angular v2: Angular 11 mintaprojekt
- MSAL React: React Router-példa
Események
Ha az alkalmazás különböző részeinek közvetlen hozzáférés nélkül kell reagálniuk a kijelentkezési állapotra a logoutRedirect vagy a logoutPopup által visszaadott promise-hoz, használhatja a event API-t.
Az események akkor lesznek kibocsátva, ha a kijelentkezés sikeres vagy sikertelen, és amikor az előugró ablak megnyílik a használat során logoutPopup.
Fontos megjegyzések
- Ha a rendszer nem ad át fiókot a kijelentkezési API-nak, vagy nincs EndSessionRequest objektum, az összes fiókból kijelentkezik.
- Ha a rendszer átad egy fiókot a bejelentkezési API-nak, az MSAL csak az adott fiókhoz kapcsolódó jogkivonatokat törli.
- A kiszolgálói kijelentkezés egy kényelmi funkció, és mint ilyen, a legjobb munkával történik. A kijelentkezési API-k sikeresen befejeződnek, amennyiben a helyi alkalmazás-gyorsítótárat sikeresen törölték, függetlenül attól, hogy a szerveroldali kijelentkeztetés sikeres-e.
Következő lépések
Részletesebb témaköröket is megismer, például: