Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Eenmalige aanmelding (SSO) biedt een naadlozere ervaring doordat een gebruiker minder vaak om referenties wordt gevraagd. Gebruikers voeren hun referenties eenmaal in en de tot stand gebrachte sessie kan opnieuw worden gebruikt door andere toepassingen op hetzelfde apparaat zonder verdere prompts.
Microsoft Entra ID schakelt eenmalige aanmelding in door een sessiecookie in te stellen wanneer een gebruiker zich voor het eerst authenticeert. MSAL.js slaat ook de id-tokens en toegangstokens van de gebruiker op in de browseropslag per toepassingsdomein. De twee mechanismen, Microsoft Entra session cookie en Microsoft Authentication Library (MSAL) cache, zijn onafhankelijk van elkaar, maar werken samen om SSO-gedrag te bieden.
SSO tussen browsertabbladen voor dezelfde app
Wanneer een gebruiker een toepassing heeft geopend op verschillende tabbladen en zich aanmeldt bij een van deze tabbladen, kunnen ze worden aangemeld bij dezelfde app die op andere tabbladen wordt geopend zonder dat hierom wordt gevraagd. Hiervoor moet u de cacheLocation instellen in het configuratieobject van MSAL.js, zoals weergegeven in het volgende voorbeeld:
const config = {
auth: {
clientId: "1111-2222-3333-4444-55555555",
},
cache: {
cacheLocation: "localStorage",
},
};
const msalInstance = new msal.PublicClientApplication(config);
In dit geval maken toepassingsexemplaren op verschillende browsertabbladen gebruik van dezelfde MSAL-cache, waardoor de verificatiestatus ertussen wordt gedeeld. U kunt ook MSAL-gebeurtenissen gebruiken voor het bijwerken van toepassingsexemplaren wanneer een gebruiker zich aanmeldt vanuit een ander browsertabblad of -venster. Zie voor meer informatie: Het synchroniseren van de ingelogde status tussen tabbladen en vensters
Single Sign-On tussen verschillende apps
Wanneer een gebruiker zich verifieert, wordt een sessiecooky ingesteld op het Microsoft Entra-domein in de browser. MSAL.js is afhankelijk van deze sessiecookie om SSO voor de gebruiker tussen verschillende applicaties te bieden. Met name biedt MSAL.js de ssoSilent
methode om de gebruiker aan te melden en tokens te verkrijgen zonder tussenkomst. Als de gebruiker echter meerdere gebruikersaccounts in een sessie met Microsoft Entra-id heeft, wordt de gebruiker gevraagd een account te kiezen waarmee hij zich aanmeldt. Daarom zijn er twee manieren om eenmalige aanmelding te bereiken met behulp van de ssoSilent
-methode.
Met hint van de gebruiker
Om de prestaties te verbeteren en ervoor te zorgen dat de autorisatieserver naar de juiste accountsessie zoekt, kunt u een van de volgende opties doorgeven in het aanvraagobject van de ssoSilent
methode om het token op de achtergrond te verkrijgen.
-
login_hint
, die kan worden opgehaald uit de eigenschap gebruikersnaam van hetaccount
object of deupn
claim in het ID-token. Als uw app gebruikers verificeert met B2C, raadpleegt u: B2C-gebruikersstromen configureren om een gebruikersnaam in id-tokens te verzenden - Sessie-id,
sid
die kan worden opgehaald uitidTokenClaims
eenaccount
object. -
account
, die kan met behulp van een van de accountmethoden worden opgehaald
We raden u aan om de login_hint
optionele id-tokenclaim te gebruiken die is ssoSilent
opgegeven als loginHint
de meest betrouwbare accounthint van stille en interactieve aanvragen.
Een hint voor aanmelden gebruiken
De login_hint
optionele claim biedt een hint voor Microsoft Entra-id over het gebruikersaccount dat zich probeert aan te melden. Als u de accountselectieprompt wilt omzeilen die doorgaans wordt weergegeven tijdens interactieve verificatieaanvragen, geeft u de loginHint
volgende informatie op:
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
}
}
In dit voorbeeld loginHint
bevat de e-mail of UPN van de gebruiker, die wordt gebruikt als een hint tijdens interactieve tokenaanvragen. De hint kan worden doorgegeven tussen toepassingen om stille SSO mogelijk te maken, waarbij toepassing A een gebruiker kan aanmelden, de loginHint
-claim kan lezen en vervolgens de claim en de huidige tenantcontext naar toepassing B kan verzenden. Microsoft Entra ID zal proberen het aanmeldingsformulier vooraf in te vullen of de prompt voor accountselectie te omzeilen, en direct door te gaan met het verificatieproces voor de opgegeven gebruiker.
Als de gegevens in de login_hint
claim niet overeenkomen met een bestaande gebruiker, worden ze omgeleid om de standaardaanmeldingservaring te doorlopen, inclusief accountselectie.
Een sessie-id gebruiken
Als u een sessie-id wilt gebruiken, voegt u sid
toe als een optionele claim voor de id-tokens van uw app. Met sid
de claim kan een toepassing de Microsoft Entra-sessie van een gebruiker identificeren, onafhankelijk van de accountnaam of gebruikersnaam. Zie sid
voor meer informatie over het toevoegen van optionele claims zoals . Gebruik de sessie-id (SID) in stille verificatieaanvragen die u met ssoSilent
maakt in 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
}
}
Een accountobject gebruiken
Als u de gebruikersaccountgegevens kent, kunt u het gebruikersaccount ook ophalen met behulp van de methode getAccountByUsername()
of 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
}
}
Zonder hint van de gebruiker
U kunt proberen de ssoSilent
methode te gebruiken zonder dat er een account
wordt doorgegeven, sid
of login_hint
zoals wordt weergegeven in de volgende code:
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
}
}
Er is echter een kans op fouten bij stille aanmelding als de toepassing meerdere gebruikers in één browsersessie heeft of als de gebruiker meerdere accounts voor die sessie met één browser heeft. De volgende fout kan worden weergegeven als er meerdere accounts beschikbaar zijn:
InteractionRequiredAuthError: interaction_required: AADSTS16000: Either multiple user identities are available for the current request or selected account is not supported for the scenario.
De fout geeft aan dat de server niet kan bepalen welk account moet worden aangemeld en dat een van de parameters in het vorige voorbeeld (account
, login_hint
, sid
) of een interactieve aanmelding nodig is om het account te kiezen.
Overwegingen bij het gebruik van ssoSilent
Omleidings-URI (antwoord-URL)
Voor betere prestaties en om problemen te voorkomen, stelt u de redirectUri
in op een lege pagina of een andere pagina die geen MSAL gebruikt.
- Als de toepassingsgebruikers alleen pop-up- en stille methoden gebruiken, stelt u het
redirectUri
in op hetPublicClientApplication
configuratieobject. - Als de toepassing ook omleidingsmethoden gebruikt, stelt u de
redirectUri
optie per aanvraag in.
Cookies van derden
ssoSilent
probeert een verborgen iframe te openen en een bestaande sessie opnieuw te gebruiken met Microsoft Entra-id. Dit werkt niet in browsers die cookies van derden zoals Safari blokkeren en leiden tot een interactiefout:
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
Om de fout op te lossen, moet de gebruiker een interactieve verificatieaanvraag maken met behulp van de loginPopup()
of loginRedirect()
. In sommige gevallen kan de promptwaarde none worden gebruikt in combinatie met de interactieve MSAL.js-methode om Single Sign-On (SSO) te bereiken. Zie interactieve aanvragen met prompt=geen voor meer. Als u de aanmeldingsgegevens van de gebruiker al hebt, kunt u de optionele parameters loginHint
of sid
doorgeven om een specifiek account aan te melden.
Eenmalige aanmelding met prompt=login negeren
Als u de voorkeur geeft aan Microsoft Entra ID om de gebruiker te vragen hun referenties in te voeren ondanks een actieve sessie met de autorisatieserver, kunt u de parameter voor de aanmeldingsprompt gebruiken in aanvragen met MSAL.js. Zie MSAL.js promptgedrag voor meer informatie.
Verificatiestatus delen tussen ADAL.js en MSAL.js
MSAL.js biedt functiepariteit met ADAL.js voor Microsoft Entra-verificatiescenario's. Om de migratie van ADAL.js naar MSAL.js eenvoudig te maken en de verificatiestatus tussen apps te delen, leest de bibliotheek het id-token dat de sessie van de gebruiker vertegenwoordigt in ADAL.js cache. nl-NL: Als u hiervan wilt profiteren wanneer u migreert vanuit ADAL.js, moet u ervoor zorgen dat de bibliotheken localStorage
gebruiken voor het cachen van tokens. Stel als volgt de cacheLocation
in op localStorage
in zowel de MSAL.js- als ADAL.js-configuratie bij de initialisatie:
// 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);
Volgende stappen
Zie voor meer informatie over SSO: