Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Bevor Sie hier beginnen, stellen Sie sicher, dass Sie wissen, wie Sie Sich anmelden und Token erwerben.
Bei der Verwendung von MSAL.js sollten Sie die Auswirkungen des Tokenabrufs für Benutzer verstehen und wissen, wie Sie die Gültigkeitsdauer dieser Token verwalten.
Token-Lebensdauer und Ablauf
Sie können die Tokenlebensdauer von Zugriffs-, ID- oder SAML-Token (Security Assertion Markup Language) konfigurieren, die vom Microsoft Identity Platform ausgegeben werden. Einige der Informationen sind unten zusammengefasst.
ID-Token
ID-Token sind an eine bestimmte Kombination von Konto und Client gebunden und enthalten in der Regel Profilinformationen über den Benutzer. In der Regel stimmt die Lebensdauer der Benutzersitzung einer Webanwendung mit der der Lebensdauer der ID-Tokensitzung überein, die standardmäßig 24 Stunden beträgt. Weitere Informationen zum Konfigurieren von Tokenlebensdauern finden Sie hier.
Zugriffstoken
Zugriffstoken im Browser weisen einen standardmäßig empfohlenen Ablauf von 1 Stunde auf. Nach dieser 1 Stunde werden alle Beareraufrufe mit dem abgelaufenen Token abgelehnt. Dieses Token kann unbemerkt mithilfe des mit diesem Token abgerufenen Refresh-Tokens erneuert werden. Weitere Informationen zum Konfigurieren von Tokenlebensdauern finden Sie hier.
Aktualisierungs-Token
Aktualisierungstoken für Single-Page Anwendungen sind zeitlich begrenzte Aktualisierungstoken (in der Regel 24 Stunden ab dem Zeitpunkt des Abrufs). Dies ist ein nicht anpassbares, nicht verschiebbares Fenster, Lebensdauer. Wenn ein Aktualisierungstoken zum Erneuern eines Zugriffstokens verwendet wird, wird ein neues Aktualisierungstoken mit dem erneuerten Zugriffstoken abgerufen. Dieses neue Aktualisierungstoken hat eine Lebensdauer, die der verbleibenden Lebensdauer des ursprünglichen Aktualisierungstokens entspricht. Sobald ein Aktualisierungstoken abgelaufen ist, muss ein neuer Autorisierungscodefluss initiiert werden, um einen Autorisierungscode abzurufen und ihn für einen neuen Satz von Token zu handeln.
Hinweis: Wenn ein neues Aktualisierungstoken abgerufen wird, ersetzt msal.js das zwischengespeicherte Aktualisierungstoken durch das neue Aktualisierungstoken, das alte Aktualisierungstoken wird jedoch nicht vom Server ungültig und kann weiterhin verwendet werden, um Zugriffstoken bis zum Ablauf abzurufen.
Token-Aktualisierung
Das PublicClientApplication-Objekt stellt eine API namens acquireTokenSilent bereit, die dazu dient, ein nicht abgelaufenes Token ohne Benutzerinteraktion abzurufen. Dies geschieht in einigen Schritten:
- Überprüfen Sie, ob im Token-Cache bereits ein Token für
scopes,client id,authorityund/oderhomeAccountIdentifiervorhanden ist. - Wenn ein Token für die angegebenen Parameter vorhanden ist, stellen Sie dann sicher, dass wir genau eine Übereinstimmung erhalten, und prüfen Sie das Ablaufdatum.
- Wenn das Zugriffstoken nicht abgelaufen ist, gibt MSAL eine Antwort mit den relevanten Token zurück.
- Wenn das Zugriffstoken abgelaufen ist, aber das Aktualisierungstoken noch gültig ist, verwendet MSAL das angegebene Aktualisierungstoken, um einen neuen Tokensatz abzurufen und dann eine Antwort zurückzugeben.
- Wenn das Aktualisierungstoken abgelaufen ist, versucht MSAL, über ein ausgeblendetes iFrame im Hintergrund ein Zugriffstoken abzurufen. Dadurch wird die SID oder der Benutzername im Anspruchsobjekt des Kontos verwendet, um einen Hinweis auf die Sitzung des Benutzers abzurufen. Wenn dieser versteckte IFrame-Aufruf fehlschlägt, gibt MSAL einen Fehler vom Server als
InteractionRequiredAuthErrorweiter, mit der Aufforderung, einen Autorisierungscode abzurufen, um einen neuen Satz von Tokens zu erhalten. Dazu können Sie einen Login- oder AcquireToken-API-Aufruf mit demPublicClientApplicationObjekt ausführen. Wenn die Sitzung noch aktiv ist, sendet der Server einen Code ohne Benutzeraufforderungen. Andernfalls muss der Benutzer seine Anmeldeinformationen eingeben.
Weitere Informationen zu den Konfigurationsparametern, die Sie für die Methode festlegen können, finden Sie acquireTokenSilent.
Vermeiden interaktiver Unterbrechungen in der Mitte der Sitzung eines Benutzers
In einigen Fällen kann es sinnvoll sein, erforderlichenfalls zu Beginn einer Benutzersitzung vorab eine Interaktion auszulösen, um sicherzustellen, dass Benutzer weiterhin Token im Hintergrund abrufen und Ihre Anwendung ohne weitere Unterbrechungen verwenden können. Sie können dies natürlich erreichen, indem Sie jedes Mal, wenn Ihre Anwendung zum ersten Mal geladen wird, Interaktion aufrufen, dies ist jedoch eine schlechte Benutzererfahrung und weniger performant, wenn ein Benutzer bereits Token aus einer vorherigen Sitzung oder einem anderen Fenster/Tab besitzt. Stattdessen können acquireTokenSilent Sie mit einigen Anforderungsparametern sicherstellen, dass der Cache über die erforderlichen Token verfügt, um für eine beliebige Zeitspanne im Hintergrund zurückzugeben.
Um sicherzustellen, dass acquireTokenSilent mindestens 1 Stunde lang gültige Token zurückgeben kann:
- Rufen Sie
acquireTokenSilentbeim Laden der Seite auf, wobei der AnforderungsparameterforceRefreshauftruefestgelegt ist. Dadurch wird der Cache übersprungen und ein neues Token abgerufen, das dann über den Cache bei nachfolgenden Aufrufen bereitgestellt werden kann. - Bei nachfolgenden Aufrufen lassen Sie
forceRefreshungesetzt oder explizit auffalse, damit Token aus dem Cache abgerufen werden können.
Um sicherzustellen, dass acquireTokenSilent für einen beliebigen Zeitraum von bis zu 24 Stunden gültige Token zurückgeben kann:
- Rufen Sie
acquireTokenSilentbeim Laden der Seite mit dem auftruegesetzten AnforderungsparameterforceRefresh& dem auf die gewünschte Dauer (in Sekunden) der Interaktionsfreiheit gesetzten ParameterrefreshTokenExpirationOffsetSecondsauf. - Lassen Sie bei nachfolgenden Aufrufen
forceRefreshundrefreshTokenExpirationOffsetSecondsungesetzt, um sicherzustellen, dass Token aus dem Cache bereitgestellt werden können
Wenn Sie beispielsweise sicherstellen möchten, dass der Benutzer Token für die nächsten 2 Stunden im Hintergrund abrufen kann:
var request = {
scopes: ["Mail.Read"],
account: currentAccount,
forceRefresh: true,
refreshTokenExpirationOffsetSeconds: 7200 // 2 hours * 60 minutes * 60 seconds = 7200 seconds
};
const tokenResponse = await msalInstance.acquireTokenSilent(request).catch(async (error) => {
if (error instanceof InteractionRequiredAuthError) {
// fallback to interaction when silent call fails
await msalInstance.acquireTokenRedirect(request);
}
});
Hinweis: Es gibt nie eine Garantie, dass ein Token im Hintergrund erworben werden kann, auch wenn das Aktualisierungstoken noch nicht abgelaufen ist. Die oben beschriebenen Muster sind Best-Effort-Versuche, die Interaktion zu unannenklichen Zeiten zu minimieren, aber die Möglichkeit erforderlicher Interaktionen innerhalb der gewünschten Zeitrahmen nicht zu beseitigen. Darüber hinaus geben nicht alle Identitätsanbieter die Ablaufzeit des Aktualisierungstokens zurück – in diesen Fällen wird der refreshTokenExpirationOffsetSeconds Anfrageparameter nicht ausgewertet.
Cache-Suchrichtlinie
Eine Cache-Nachschlagerichtlinie kann optional für die Anforderung bereitgestellt werden. Die Cache-Suchrichtlinien sind:
-
CacheLookupPolicy.Default-acquireTokenSilentversucht, ein Zugriffstoken aus dem Cache abzurufen. Wenn das Zugriffstoken abgelaufen ist oder nicht gefunden werden kann, wird das Aktualisierungstoken verwendet, um ein neues Token abzurufen. Schließlich wirdacquireTokenSilentversuchen, im Hintergrund ein neues Zugriffstoken, ID-Token und Aktualisierungstoken zu beziehen, wenn das Aktualisierungstoken abgelaufen ist. -
CacheLookupPolicy.AccessToken-acquireTokenSilentsucht nur nach Zugriffstoken im Cache. Es wird nicht versucht, Zugriffs- oder Aktualisierungstoken zu verlängern. -
CacheLookupPolicy.AccessTokenAndRefreshToken-acquireTokenSilentversucht, ein Zugriffstoken aus dem Cache abzurufen. Wenn das Zugriffstoken abgelaufen ist oder nicht gefunden werden kann, wird das Aktualisierungstoken verwendet, um ein neues Token abzurufen. Wenn das Aktualisierungstoken abgelaufen ist, wird es nicht erneuert undacquireTokenSilentschlägt fehl. -
CacheLookupPolicy.RefreshToken-acquireTokenSilentversucht nicht, Zugriffstoken aus dem Cache abzurufen und versucht stattdessen, das zwischengespeicherte Aktualisierungstoken für ein neues Zugriffstoken auszutauschen. Wenn das Aktualisierungstoken abgelaufen ist, wird es nicht erneuert undacquireTokenSilentschlägt fehl. -
CacheLookupPolicy.RefreshTokenAndNetwork-acquireTokenSilentsucht nicht im Cache nach dem Zugriffstoken. Der Vorgang erfolgt direkt über das Netzwerk mit dem zwischengespeicherten Refresh-Token. Wenn das Aktualisierungstoken abgelaufen ist, wird versucht, es zu erneuern. Dies entspricht der EinstellungforceRefresh: true. -
CacheLookupPolicy.Skip-acquireTokenSilentwird sowohl Zugriffs- als auch Aktualisierungstoken erneuern. Es wird nicht im Cache nachsehen. Dies schlägt immer fehl, wenn Drittanbietercookies vom Browser blockiert werden.
Codeausschnitte
Popup
var username = "test@contoso.com";
var currentAccount = msalInstance.getAccount({ username });
var silentRequest = {
scopes: ["Mail.Read"],
account: currentAccount,
forceRefresh: false,
cacheLookupPolicy: CacheLookupPolicy.Default // will default to CacheLookupPolicy.Default if omitted
};
var request = {
scopes: ["Mail.Read"],
loginHint: currentAccount.username // For v1 endpoints, use upn from idToken claims
};
const tokenResponse = await msalInstance.acquireTokenSilent(silentRequest).catch(async (error) => {
if (error instanceof InteractionRequiredAuthError) {
// fallback to interaction when silent call fails
return await msalInstance.acquireTokenPopup(request).catch(error => {
if (error instanceof InteractionRequiredAuthError) {
// fallback to interaction when silent call fails
return msalInstance.acquireTokenRedirect(request)
}
});
}
});
Umleitung
var username = "test@contoso.com";
var currentAccount = msalInstance.getAccount({ username });
var silentRequest = {
scopes: ["Mail.Read"],
account: currentAccount,
forceRefresh: false,
cacheLookupPolicy: CacheLookupPolicy.Default // will default to CacheLookupPolicy.Default if omitted
};
var request = {
scopes: ["Mail.Read"],
loginHint: currentAccount.username // For v1 endpoints, use upn from idToken claims
};
const tokenResponse = await msalInstance.acquireTokenSilent(silentRequest).catch(error => {
if (error instanceof InteractionRequiredAuthError) {
// fallback to interaction when silent call fails
return msalInstance.acquireTokenRedirect(request)
}
});
Nächste Schritte
Erfahren Sie, wie Sie abmelden.