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.
Enkel inloggning (SSO) ger en smidigare upplevelse genom att minska antalet gånger en användare uppmanas att ange autentiseringsuppgifter. Användarna anger sina autentiseringsuppgifter en gång och den etablerade sessionen kan återanvändas av andra program på samma enhet utan ytterligare frågor.
Microsoft Entra ID aktiverar enkel inloggning genom att ange en sessionscookie när en användare autentiserar för första gången. MSAL.js cachelagrar även ID-token och åtkomsttoken för användaren i webbläsarlagringen per programdomän. De två mekanismerna, Microsoft Entra sessionscookie och Microsofts autentiseringsbibliotek cacheminne (MSAL), är oberoende av varandra men arbetar tillsammans för att tillhandahålla SSO-beteende.
Enkel inloggning mellan webbläsarflikar för samma app
När en användare har ett program öppet på flera flikar och loggar in på en av dem, kan de loggas in i samma app öppna på andra flikar utan att uppmanas. För att göra det måste du ange cacheLocation i MSAL.js konfigurationsobjekt till localStorage som du ser i följande exempel:
const config = {
auth: {
clientId: "1111-2222-3333-4444-55555555",
},
cache: {
cacheLocation: "localStorage",
},
};
const msalInstance = new msal.PublicClientApplication(config);
I det här fallet använder programinstanser i olika webbläsarflikar samma MSAL-cache och delar därmed autentiseringstillståndet mellan dem. Du kan också använda MSAL-händelser för att uppdatera programinstanser när en användare loggar in från en annan webbläsarflik eller ett annat fönster. Mer information finns i: Synkronisering av inloggningsstatus mellan flikar och fönster
Enkel inloggning mellan olika appar
När en användare autentiserar anges en sessionscookie på Microsoft Entra domänen i webbläsaren. MSAL.js förlitar sig på den här sessionscookien för att tillhandahålla enkel inloggning för användaren mellan olika program. MSAL.js erbjuder särskilt metoden ssoSilent för att logga in användaren och hämta token utan interaktion. Men om användaren har flera användarkonton i en session med Microsoft Entra ID uppmanas de sedan att välja ett konto att logga in med. Därför finns det två sätt att uppnå enkel inloggning med hjälp av ssoSilent metoden.
Med användartips
För att förbättra prestanda och se till att auktoriseringsservern söker efter rätt kontosession kan du skicka något av följande alternativ i begärandeobjektet ssoSilent för metoden för att få token tyst.
-
login_hint, som kan hämtas frånaccountobjektets användarnamnegenskap eller anspråketupni ID-token. Om din app autentiserar användare med B2C, se: Konfigurera B2C-användarflöden för att inkludera användarnamn i ID-token - Sessions-ID,
sid, som kan hämtas frånidTokenClaimsettaccountobjekt. -
account, som kan hämtas med en av kontometoderna
Vi rekommenderar att du använder det login_hintvalfria ID-tokenanspråket som tillhandahålls till ssoSilent som loginHint, eftersom det är den mest tillförlitliga kontohinten för tysta och interaktiva begäranden.
Använda ett inloggningstips
Det valfria anspråket login_hint ger Microsoft Entra ID en indikation om vilket användarkonto som försöker logga in. Om du vill kringgå den fråga om kontoval som vanligtvis visas under interaktiva autentiseringsbegäranden anger du enligt loginHint följande:
const silentRequest = {
scopes: ["User.Read", "Mail.Read"],
loginHint: "user@contoso.com"
};
try {
const loginResponse = await msalInstance.ssoSilent(silentRequest);
} catch (err) {
if (err instanceof InteractionRequiredAuthError) {
const loginResponse = await msalInstance.loginPopup(silentRequest).catch(error => {
// handle error
});
} else {
// handle error
}
}
I det här exemplet loginHint innehåller användarens e-post eller UPN, som används som tips vid interaktiva tokenbegäranden. Tipset kan skickas mellan program för att underlätta tyst enkel inloggning, där program A kan logga in en användare, läsa loginHint, och sedan skicka anspråket och den aktuella klientkontexten till program B. Microsoft Entra ID försöker fylla i inloggningsformuläret i förväg eller kringgå kommandotolken för kontoval och fortsätta direkt med autentiseringsprocessen för den angivna användaren.
Om informationen i anspråket login_hint inte matchar någon befintlig användare omdirigeras de för att gå igenom standardinloggningsupplevelsen, inklusive val av konto.
Använda ett sessions-ID
Om du vill använda ett sessions-ID lägger du till sid som ett valfritt anspråk på appens ID-token. Anspråket sid gör det möjligt för ett program att identifiera en användares Microsoft Entra session oberoende av deras kontonamn eller användarnamn. Information om hur du lägger till valfria anspråk som sidfinns i Ange valfria anspråk i din app. Använd sessions-ID (SID) i tysta autentiseringsförfrågningar som du gör med ssoSilent i MSAL.js.
const request = {
scopes: ["user.read"],
sid: sid,
};
try {
const loginResponse = await msalInstance.ssoSilent(request);
} catch (err) {
if (err instanceof InteractionRequiredAuthError) {
const loginResponse = await msalInstance.loginPopup(request).catch(error => {
// handle error
});
} else {
// handle error
}
}
Använda ett kontoobjekt
Om du känner till informationen om användarkontot kan du också hämta användarkontot med hjälp av metoderna getAccountByUsername() eller getAccountByHomeId():
const username = "test@contoso.com";
const myAccount = msalInstance.getAccountByUsername(username);
const request = {
scopes: ["User.Read"],
account: myAccount
};
try {
const loginResponse = await msalInstance.ssoSilent(request);
} catch (err) {
if (err instanceof InteractionRequiredAuthError) {
const loginResponse = await msalInstance.loginPopup(request).catch(error => {
// handle error
});
} else {
// handle error
}
}
Utan användartips
Du kan försöka använda ssoSilent metoden utan att skicka någon account, sid eller login_hint som du ser i följande kod:
const request = {
scopes: ["User.Read"]
};
try {
const loginResponse = await msalInstance.ssoSilent(request);
} catch (err) {
if (err instanceof InteractionRequiredAuthError) {
const loginResponse = await msalInstance.loginPopup(request).catch(error => {
// handle error
});
} else {
// handle error
}
}
Det finns dock en sannolikhet för tyst inloggningsfel om programmet har flera användare i en enda webbläsarsession eller om användaren har flera konton för den enskilda webbläsarsessionen. Följande fel kan visas om flera konton är tillgängliga:
InteractionRequiredAuthError: interaction_required: AADSTS16000: Either multiple user identities are available for the current request or selected account is not supported for the scenario.
Felet anger att servern inte kunde avgöra vilket konto som ska loggas in och kräver antingen någon av parametrarna i föregående exempel (account, login_hint, sid) eller en interaktiv inloggning för att välja kontot.
Saker att tänka på när du använder ssoSilent
Omdirigerings-URI (svars-URL)
För bättre prestanda och för att undvika problem anger du redirectUri till en tom sida eller annan sida som inte använder MSAL.
- Om programmet bara använder popup- och tysta metoder anger du
redirectUripå konfigurationsobjektetPublicClientApplication. - Om programmet också använder omdirigeringsmetoder anger du
redirectUriper begäran.
Cookies från tredje part
ssoSilentförsöker öppna en dold iframe och återanvända en befintlig session med Microsoft Entra ID. Detta fungerar inte i webbläsare som blockerar cookies från tredje part, till exempel Safari, och det leder till ett interaktionsfel:
InteractionRequiredAuthError: login_required: AADSTS50058: A silent sign-in request was sent but no user is signed in. The cookies used to represent the user's session were not sent in the request to Azure AD
För att lösa felet måste användaren skapa en interaktiv autentiseringsbegäran med hjälp av loginPopup() eller loginRedirect(). I vissa fall kan promptvärdet none användas tillsammans med en interaktiv metod i MSAL.js för att uppnå enkel inloggning (SSO). Se Interaktiva förfrågningar med prompt=none för mer information. Om du redan har användarens inloggningsinformation kan du ange någon av de valfria parametrarna loginHint eller sid för att logga in på ett visst konto.
Negera enkel inloggning med prompt=login
Om du föredrar att Microsoft Entra ID uppmana användaren att ange sina autentiseringsuppgifter trots en aktiv session med auktoriseringsservern kan du använda parametern för inloggningsprompt i begäranden med MSAL.js. Mer information finns i MSAL.js-promptbeteende.
Dela autentiseringstillstånd mellan ADAL.js och MSAL.js
MSAL.js ger funktionsparitet med ADAL.js för Microsoft Entra autentiseringsscenarier. För att göra migreringen från ADAL.js till MSAL.js enkel och dela autentiseringstillståndet mellan appar läser biblioteket ID-token som representerar användarens session i ADAL.js cacheminnet. Om du vill dra nytta av detta när du migrerar från ADAL.jsmåste du se till att biblioteken använder localStorage för cachelagringstoken. Ange cacheLocation som localStorage i konfigurationen för både MSAL.js och ADAL.js vid initialisering enligt följande:
// In ADAL.js
window.config = {
clientId: "1111-2222-3333-4444-55555555",
cacheLocation: "localStorage",
};
var authContext = new AuthenticationContext(config);
// In latest MSAL.js version
const config = {
auth: {
clientId: "1111-2222-3333-4444-55555555",
},
cache: {
cacheLocation: "localStorage",
},
};
const msalInstance = new msal.PublicClientApplication(config);
Nästa steg
Mer information om SSO finns här: