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.
BrowserConfigurationAuthErrors
stubbed_public_client_application_called
Fehlermeldung: Die Stub-Instanz der öffentlichen Clientanwendung wurde aufgerufen. Wenn Sie msal-react verwenden, stellen Sie sicher, dass der Kontext nicht ohne einen Anbieter verwendet wird.
Siehe Msal-React-Fehler
BrowserAuthErrors
Interaktion_läuft
Fehlermeldung: Interaktion ist derzeit im Gange. Stellen Sie sicher, dass diese Interaktion abgeschlossen wurde, bevor Sie eine interaktive API aufrufen.
Dieser Fehler wird ausgelöst, wenn eine interaktive API (loginPopup, loginRedirect, acquireTokenPopup, acquireTokenRedirect) aufgerufen wird, während eine andere interaktive API noch ausgeführt wird. Die Anmelde- und AcquireToken-APIs sind asynchron, sodass Sie sicherstellen müssen, dass die resultierenden Zusagen aufgelöst wurden, bevor Sie eine andere aufrufen.
Verwenden Sie loginPopup oder acquireTokenPopup
Stellen Sie sicher, dass die von diesen APIs zurückgegebene Zusage aufgelöst wurde, bevor Sie eine andere aufrufen.
❌ Im folgenden Beispiel wird dieser Fehler ausgelöst, da loginPopup noch ausgeführt wird, wenn acquireTokenPopup aufgerufen wird:
const request = { scopes: ["openid", "profile"] };
loginPopup();
acquireTokenPopup(request);
✔️ Um dies zu beheben, sollten Sie sicherstellen, dass alle interaktiven APIs aufgelöst wurden, bevor Sie eine andere aufrufen:
const request = { scopes: ["openid", "profile"] };
await msalInstance.loginPopup();
await msalInstance.acquireTokenPopup(request);
Verwenden Sie loginRedirect oder acquireTokenRedirect
Bei der Verwendung von Redirect-APIs muss handleRedirectPromise bei der Rückkehr von der Umleitung aufgerufen werden. Dadurch wird sichergestellt, dass die Tokenantwort vom Server ordnungsgemäß verarbeitet wird und temporäre Cacheeinträge bereinigt werden. Dieser Fehler wird ausgelöst, wenn handleRedirectPromise nicht abgeschlossen werden konnte, bevor die Anwendung loginRedirect oder acquireTokenRedirect aufruft.
❌ Im folgenden Beispiel wird dieser Fehler ausgelöst, da handleRedirectPromise die Antwort eines vorherigen loginRedirect Aufrufs weiterhin verarbeitet wird, wenn loginRedirect ein 2. Mal aufgerufen wird:
msalInstance.handleRedirectPromise();
const accounts = msalInstance.getAllAccounts();
if (accounts.length === 0) {
// No user signed in
msalInstance.loginRedirect();
}
✔️ Um dies zu beheben, sollten Sie warten, bis handleRedirectPromise abgeschlossen ist, bevor Sie eine interaktive API aufrufen:
await msalInstance.handleRedirectPromise();
const accounts = msalInstance.getAllAccounts();
if (accounts.length === 0) {
// No user signed in
msalInstance.loginRedirect();
}
Alternativ:
msalInstance
.handleRedirectPromise()
.then((tokenResponse) => {
if (!tokenResponse) {
const accounts = msalInstance.getAllAccounts();
if (accounts.length === 0) {
// No user signed in
msalInstance.loginRedirect();
}
} else {
// Do something with the tokenResponse
}
})
.catch((err) => {
// Handle error
console.error(err);
});
Hinweis: Wenn Sie loginRedirect oder acquireTokenRedirect von einer Seite aus aufrufen, die nicht Ihre redirectUri ist, müssen Sie sicherstellen, dass handleRedirectPromise sowohl auf der redirectUri-Seite als auch auf der Seite aufgerufen und abgewartet wird, von der aus Sie die Weiterleitung initiiert haben. Dies liegt daran, dass die redirectUri Seite eine Umleitung zurück zu der Seite initiiert, die ursprünglich aufgerufen wurde loginRedirect , und diese Seite verarbeitet die Tokenantwort.
Wrapper-Bibliotheken
Wenn Sie eine unserer Wrapper-Bibliotheken (React oder Angular) verwenden, lesen Sie bitte die Dokumentation zu diesem Fehler in diesen Bibliotheken, um weitere Gründe zu erfahren, warum dieser Fehler möglicherweise angezeigt wird:
Wenn Sie keine der Wrapperbibliotheken verwenden, aber bedenken, dass Ihre Anwendung möglicherweise gleichzeitige interaktive Anforderungen auslöst, sollten Sie überprüfen, ob eine andere Interaktion ausgeführt wird, bevor Sie eine Interaktion in Ihrer Tokenakquisitionsmethode aufrufen. Sie können dies erreichen, indem Sie einen globalen Anwendungsstatus oder einen Übertragungsdienst usw. implementieren, der den aktuellen MSAL-Interaktionsstatus über die MSAL-Ereignis-API ausgibt.
❌ Im folgenden Beispiel wird dieser Fehler ausgelöst, weil der acquireTokenPopup im catch-Block nicht prüft, ob gerade eine andere Interaktion stattfindet:
async function myAcquireToken(request) {
const msalInstance = getMsalInstance(); // get the msal application instance
const tokenRequest = {
account: msalInstance.getActiveAccount() || null;
...request
};
let tokenResponse;
try {
// attempt silent acquisition first
tokenResponse = await msalInstance.acquireTokenSilent(tokenRequest);
} catch (error) {
if (error instanceof InteractionRequiredAuthError) {
try {
tokenResponse = await msalInstance.acquireTokenPopup(tokenRequest);
} catch (err) {
console.log(err);
// handle other errors
}
}
console.log(error);
// handle other errors
}
return tokenResponse;
};
const request = {
scopes: ["User.Read"]
};
myAcquireToken(request);
myAcquireToken(request);
✔️ Um dies zu beheben, sollten Sie warten, bis der Interaktionsstatus None ist, bevor Sie eine andere interaktive API aufrufen:
async function myAcquireToken(request) {
const msalInstance = getMsalInstance(); // get the msal application instance
const tokenRequest = {
account: msalInstance.getActiveAccount() || null;
...request
};
let tokenResponse;
try {
// attempt silent acquisition first
tokenResponse = await msalInstance.acquireTokenSilent(tokenRequest);
} catch (error) {
if (error instanceof InteractionRequiredAuthError) {
// check for any interactions
if (myGlobalState.getInteractionStatus() !== InteractionStatus.None) {
// throw a new error to be handled in the caller below
throw new Error("interaction_in_progress");
} else {
// no interaction, invoke popup flow
tokenResponse = await msalInstance.acquireTokenPopup(tokenRequest);
}
}
console.log(error);
// handle other errors
}
return tokenResponse;
};
async function myInteractionInProgressHandler() {
/**
* "myWaitFor" method polls the interaction status via getInteractionStatus() from
* the application state and resolves when it's equal to "None".
*/
await myWaitFor(() => myGlobalState.getInteractionStatus() === InteractionStatus.None);
// wait is over, call myAcquireToken again to re-try acquireTokenSilent
return (await myAcquireToken(tokenRequest));
};
const request = {
scopes: ["User.Read"]
};
myAcquireToken(request).catch((e) => myInteractionInProgressHandler());
myAcquireToken(request).catch((e) => myInteractionInProgressHandler());
Schritte zur Problembehandlung
-
Aktivieren Sie die detaillierte Protokollierung und verfolgen Sie die Reihenfolge der Ereignisse. Stellen Sie sicher, dass
handleRedirectPromiseaufgerufen wird und zurückkehrt, bevor einelogin- oderacquireToken-API aufgerufen wird.
Wenn Sie nicht herausfinden können, warum dieser Fehler ausgelöst wird, öffnen Sie ein Problem , und seien Sie bereit, die folgenden Informationen freizugeben:
- Ausführliche Protokolle
- Beispiel-App und/oder Codeausschnitte, mit denen wir das Problem reproduzieren können
- Aktualisieren Sie die Seite. Ist der Fehler nicht mehr aufgetreten?
- Öffnen Sie Ihre Anwendung auf einer neuen Registerkarte. Ist der Fehler nicht mehr aufgetreten?
block_iframe_reload
Fehlermeldung: Die Anforderung wurde innerhalb eines iframes blockiert, da MSAL eine Authentifizierungsantwort erkannt hat.
Dieser Fehler wird ausgelöst, wenn Sie ssoSilent oder acquireTokenSilent aufrufen und die Seite, die als Ihr redirectUri verwendet wird, versucht, eine Login- oder acquireToken-Funktion aufzurufen.
Unsere empfohlene Abhilfemaßnahme hierfür besteht darin, Ihre redirectUri auf eine leere Seite festzulegen, die MSAL beim Aufrufen von Silent-APIs nicht implementiert. Dies hat auch den zusätzlichen Vorteil, dass die Leistung verbessert wird, da der ausgeblendete iFrame Ihre Seite nicht rendern muss.
✔️ Sie können dies z. B. auf Anforderungsbasis tun:
msalInstance.acquireTokenSilent({
scopes: ["User.Read"],
redirectUri: "http://localhost:3000/blank.html",
});
Denken Sie daran, dass Sie diese neue redirectUri Registrierung bei Ihrer App-Registrierung durchführen müssen.
Wenn Sie für diesen Zweck keinen dedizierten redirectUri verwenden möchten, sollten Sie stattdessen sicherstellen, dass Ihr redirectUri nicht versucht, MSAL-APIs aufzurufen, wenn es innerhalb des ausgeblendeten iFrames gerendert wird, der von den Silent-APIs verwendet wird.
monitor_window_timeout
Fehlermeldungen:
- Fehler beim Tokenerwerb im iFrame aufgrund eines Timeouts.
Dieser Fehler kann ausgelöst werden, wenn Sie anrufenssoSilent, acquireTokenSilentacquireTokenPopupoder loginPopup es gibt mehrere Gründe dafür. Dies sind einige der am häufigsten verwendeten:
- Die Seite, die Sie als Ihr
redirectUriverwenden, entfernt oder manipuliert den Hashwert. - Die Seite, die Sie als
redirectUriverwenden, wird automatisch zu einer anderen Seite weitergeleitet - Sie werden von Ihrem Identitätsanbieter gedrosselt
- Ihr Identitätsanbieter hat nicht zurück zu Ihrem
redirectUriumgeleitet.
Wichtig: Wenn Ihre Anwendung eine Routerbibliothek verwendet (z. B. React Router, Angular Router), stellen Sie bitte sicher, dass der Hash oder die automatische Umleitung nicht entfernt wird, während der MSAL-Tokenerwerb ausgeführt wird. Wenn möglich, ist es am besten, wenn Ihre redirectUri Seite den Router überhaupt nicht aufruft.
Von der RedirectUri-Seite verursachte Probleme
Wenn Sie einen unbeaufsichtigten Anruf tätigen, wird in einigen Fällen ein iframe geöffnet und zur Autorisierungsseite Ihres Identitätsanbieters navigiert. Nachdem der Identitätsanbieter den Benutzer autorisiert hat, leitet er das IFrame mit dem Autorisierungscode oder Fehlerinformationen im Hash-Fragment an redirectUri zurück. Die MSAL-Instanz, die in dem Frame oder Fenster ausgeführt wird, das die Anforderung ursprünglich gesendet hat, extrahiert diesen Antwort-Hash und verarbeitet ihn. Wenn redirectUri diesen Hash entfernt oder manipuliert oder zu einer anderen Seite navigiert, bevor MSAL ihn extrahiert hat, erhalten Sie diesen Timeoutfehler.
✔️ Um dieses Problem zu lösen, sollten Sie sicherstellen, dass die Seite, die Sie als Ihre redirectUri verwenden, zumindest dann, wenn sie in einem Pop-up oder iFrame geladen wird, nichts davon tut. Wir empfehlen, für stille und Popup-Abläufe eine leere Seite als Ihre redirectUri zu verwenden, damit keines dieser Dinge passieren kann.
Sie können dies z. B. auf Anforderungsbasis tun:
msalInstance.acquireTokenSilent({
scopes: ["User.Read"],
redirectUri: "http://localhost:3000/blank.html",
});
Denken Sie daran, dass Sie diese neue redirectUri Registrierung bei Ihrer App-Registrierung durchführen müssen.
Hinweise zu Angular und React:
- Wenn Sie
@azure/msal-angularverwenden, sollte IhreredirectUriSeite nicht durch dieMsalGuardgeschützt sein. - Wenn Sie
@azure/msal-reactverwenden, sollte IhreredirectUri-SeiteMsalAuthenticationComponentnicht rendern oder den HookuseMsalAuthenticationverwenden.
Vom Identitätsanbieter verursachte Probleme
Drosselung
Einer der häufigsten Gründe, warum dieser Fehler ausgelöst werden kann, besteht darin, dass Ihre Anwendung in einer Schleife hängen geblieben ist oder zu viele Tokenanforderungen in kurzer Zeit ausgeführt hat. Wenn dies geschieht, kann der Identitätsanbieter nachfolgende Anfragen für kurze Zeit drosseln, sodass Sie nicht zurück zu Ihrem redirectUri weitergeleitet werden, was letztlich zu diesem Fehler führt.
✔️ Um drosselungsbedingte Probleme zu beheben, haben Sie 2 Optionen:
- Stellen Sie für kurze Zeit keine Anfragen mehr, bevor Sie es erneut versuchen.
- Rufen Sie eine interaktive API auf, wie
acquireTokenPopupoderacquireTokenRedirect.
X-Frame-Options Verweigern
Sie können diese Fehlermeldung auch erhalten, wenn der Identitätsanbieter nicht zu Ihrer Anwendung zurückleitet. In stillen Szenarien wird dieser Fehler manchmal von einem X-Frame-Options: Deny-Fehler begleitet, der darauf hinweist, dass Ihr Identitätsanbieter entweder versucht, Ihnen eine Fehlermeldung anzuzeigen, oder eine Benutzerinteraktion erwartet.
✔️ Der Fehler "X-Frame-Options" enthält in der Regel eine URL, und das Öffnen dieser URL auf einer neuen Registerkarte kann Ihnen helfen zu erkennen, was passiert. Wenn eine Interaktion erforderlich ist, sollten Sie stattdessen eine interaktive API verwenden. Wenn ein Fehler angezeigt wird, beheben Sie den Fehler.
Es wird erwartet, dass einige B2C-Flüsse diesen Fehler aufgrund der Notwendigkeit der Benutzerinteraktion auslösen. Zu diesen Flüssen gehören:
- Zurücksetzen von Kennwörtern
- Profil bearbeiten
- Anmelden
- Einige benutzerdefinierte Richtlinien, je nachdem, wie sie konfiguriert sind
Netzwerklatenz
Ein weiterer potenzieller Grund, warum der Identitätsanbieter möglicherweise nicht rechtzeitig zu Ihrer Anwendung umgeleitet wird, besteht möglicherweise darin, dass es eine zusätzliche Netzwerklatenz gibt.
✔️ Das Standard-Timeout beträgt etwa 10 Sekunden und sollte in den meisten Fällen ausreichen. Wenn Ihr Identitätsanbieter jedoch für die Weiterleitung länger benötigt, können Sie dieses Timeout in der MSAL-Konfiguration mit einem der Konfigurationsparameter iframeHashTimeout, windowHashTimeout oder loadFrameTimeout erhöhen.
const msalConfig = {
auth: {
clientId: "your-client-id",
},
system: {
windowHashTimeout: 9000, // Applies just to popup calls - In milliseconds
iframeHashTimeout: 9000, // Applies just to silent calls - In milliseconds
loadFrameTimeout: 9000, // Applies to both silent and popup calls - In milliseconds
},
};
hash_empty_error
Fehlermeldungen:
Der Hashwert kann nicht verarbeitet werden, da er leer ist. Bitte vergewissern Sie sich, dass Ihre redirectUri den Hash nicht entfernt.
Dieser Fehler tritt auf, wenn die Seite, die Sie als Umleitungs-Uri verwenden, den Hash entfernt oder automatisch auf eine andere Seite umgeleitet wird. Dies geschieht am häufigsten, wenn die Anwendung einen Router implementiert, der zu einer anderen Route navigiert und den Hash abgibt.
Um diesen Fehler zu beheben, empfehlen wir die Verwendung einer dedizierten RedirectUri-Seite, die dem Router nicht unterliegt. Für stille und Popup-Anrufe verwenden Sie am besten eine leere Seite. Wenn dies nicht möglich ist, stellen Sie sicher, dass der Router nicht navigiert, während der MSAL-Tokenerwerb ausgeführt wird. Sie können dies tun, indem Sie erkennen, ob Ihre Anwendung für stille Aufrufe in einem iFrame, für Popup-Aufrufe in einem Popup geladen wird oder indem Sie bei Redirect-Aufrufen auf handleRedirectPromise warten.
Hash enthält keine bekannten Eigenschaften
Fehlermeldungen:
Hash enthält keine bekannten Eigenschaften. Bitte prüfen Sie, dass Ihre redirectUri den Hash nicht ändert.
Bitte lesen Sie die Erläuterung für hash_empty_error weiter oben. Die Ursache für diesen Fehler ist ähnlich; der Unterschied besteht darin, dass der Hash geändert wurde, anstatt entfernt zu werden.
Token konnte nicht von der nativen Plattform abgerufen werden
Fehlermeldungen:
- Token kann nicht von der nativen Plattform abgerufen werden.
Dieser Fehler wird ausgelöst, wenn die acquireTokenByCode-API mit dem nativeAccountId anstelle von code aufgerufen wird und die App in einer Umgebung ausgeführt wird, in der keine Token vom nativen Broker abgerufen werden. Eine Liste der Voraussetzungen finden Sie im Dokument zu gerätegebundenen Token.
Native-Verbindung konnte nicht hergestellt werden
Fehlermeldungen:
- Die Verbindung mit der systemeigenen Plattform wurde nicht hergestellt. Installieren Sie eine kompatible Browsererweiterung, und führen Sie initialize() aus.
Dieser Fehler wird ausgelöst, wenn sich der Benutzer mit dem systemeigenen Broker angemeldet hat, aber derzeit keine Verbindung mit dem systemeigenen Broker besteht. Dies kann aus folgenden Gründen geschehen:
- Die Erweiterung Windows Konten wurde deinstalliert oder deaktiviert.
- Die
initializeAPI wurde nicht aufgerufen oder wurde nicht erwartet, bevor eine andere MSAL-API aufgerufen wird.
uninitialized_public_client_application
Fehlermeldungen:
- Sie müssen die Initialisierungsfunktion aufrufen und warten, bevor Sie versuchen, eine andere MSAL-API aufzurufen.
Dieser Fehler wird ausgelöst, wenn die login-, acquireToken- oder handleRedirectPromise-API aufgerufen wird, bevor die initialize-API aufgerufen wurde. Die initialize API muss aufgerufen und erwartet werden, bevor versucht wird, Token zu erwerben.
❌ Im folgenden Beispiel wird dieser Fehler ausgelöst, weil handleRedirectPromise aufgerufen wird, bevor initialize abgeschlossen ist:
const msalInstance = new PublicClientApplication({
auth: {
clientId: "your-client-id",
},
system: {
allowNativeBroker: true,
},
});
await msalInstance.handleRedirectPromise(); // This will throw
msalInstance.acquireTokenSilent(); // This will also throw
✔️ Um dies zu beheben, sollten Sie warten, bis initialize abgeschlossen ist, bevor Sie eine andere MSAL-API aufrufen:
const msalInstance = new PublicClientApplication({
auth: {
clientId: "your-client-id",
},
system: {
allowNativeBroker: true,
},
});
await msalInstance.initialize();
await msalInstance.handleRedirectPromise(); // This will no longer throw this error since initialize completed before this was invoked
msalInstance.acquireTokenSilent(); // This will also no longer throw this error
Other
Fehler, die von msal nicht ausgelöst werden, z. B. Serverfehler
Der Zugriff auf abruf unter [url] wurde durch die CORS-Richtlinie blockiert.
Dieser Fehler tritt bei MSAL.js v2.x auf und ist aufgrund einer unsachgemäßen Konfiguration während der App-Registrierung auf Azure-Portal zurückzuführen. Insbesondere sollten Sie sicherstellen, dass Ihr redirectUri in Ihrer App-Registrierung im Bereich Authentifizierung als Typ Single-page application registriert ist. Wenn dies erfolgreich abgeschlossen ist, wird ein grünes Häkchen angezeigt, das besagt:
Ihr Umleitungs-URI ist für den Autorisierungscodefluss mit PKCE berechtigt.