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.
Wenn Sie noch nicht mit MSAL arbeiten, sollten Sie hier beginnen.
Wenn Sie von MSAL v2 kommen, sollten Sie dieses Handbuch zuerst überprüfen, um zu MSAL v3 zu migrieren. Wenn Sie von MSAL v3 stammen, sollten Sie dieses Handbuch zuerst überprüfen, um zu MSAL v4 zu migrieren und dann die nächsten Schritte auszuführen.
Wenn Sie von MSAL v4 stammen, können Sie diesem Leitfaden folgen, um Ihren Code für die Verwendung von MSAL v5 zu aktualisieren.
Api-Unterbrechungsänderungen
Der Rückgabetyp "SignedHttpRequest.removeKeys" wurde geändert.
Die removeKeys Funktion für die SignedHttpRequest Klasse gibt Promise<void> jetzt anstelle von Promise<boolean>. Eine erfolgreiche Auflösung der Zusage entspricht nun dem, was zuvor ein Rückgabewert war true. Wenn ein Fehler auftritt, wird es nun als Fehler ausgelöst, anstatt zurückzugeben false.
// BEFORE
const shr = new SignedHttpRequest(shrParameters, shrOptions);
const result = await shr.removeKeys(thumbprint);
if (result) {
// do something on success
} else {
// do something on failure
}
// AFTER
const shr = new SignedHttpRequest(shrParameters, shrOptions);
await shr
.removeKeys(thumbprint)
.then(() => {
// do something on success
})
.catch((e) => {
// do something on failure
console.log(e);
});
TokenCache und loadExternalTokens
MSAL JS-API für loadExternalTokens wird geändert. Zu den Änderungen zählt Folgendes:
-
TokenCacheobjekt undgetTokenCache()wurden entfernt - Die
loadExternalTokens()API ist jetzt ein separater Export und erfordertConfigurationals Parameter
// BEFORE
const pca = new PublicClientApplication(config);
await pca
.getTokenCache()
.loadExternalTokens(silentRequest, serverResponse, loadTokenOptions);
//AFTER
await loadExternalTokens(
config,
silentRequest,
serverResponse,
loadTokenOptions
);
handleRedirectPromise API-Signatur hat sich geändert
PublicClientApplication.handleRedirectPromise Zuvor wurde ein optionaler Hashparameter verwendet. Es wurde ein neuer Optionstyp eingeführt HandleRedirectPromiseOptions . Seit MSAL Browser v5 ist ein optionales Objekt vom Typ HandleRedirectPromiseOptions der einzige Parameter, den handleRedirectPromise() akzeptiert.
// BEFORE
const hash = window.location.hash; // Arbitrary example value
pca.handleRedirectPromise(hash);
// AFTER
pca.handleRedirectPromise({
hash: window.location.hash, // Option nested inside a `HandleRedirectPromiseOptions` object
navigateToLoginRequestUrl: true, // Additional option
});
Entfernen einiger Funktionen in PublicClientApplication
Die folgenden Funktionen PublicClientApplication wurden entfernt:
enableAccountStorageEvents()unddisableAccountStorageEvents(): Kontospeicherereignisse sind jetzt immer aktiviert. Diese Funktionsaufrufe sind nicht mehr erforderlich.getAccountByHomeId(),getAccountByLocalId()undgetAccountByUsername(): verwenden SiegetAccount()stattdessen.// BEFORE const account1 = accountManager.getAccountByHomeId(yourHomeAccountId); const account2 = accountManager.getAccountByLocalId(yourLocalAccountId); const account3 = accountManager.getAccountByUsername(yourUsername); // AFTER const account1 = accountManager.getAccount({ homeAccountId: yourHomeAccountId, }); const account2 = accountManager.getAccount({ localAccountId: yourLocalAccountId, }); const account3 = accountManager.getAccount({ username: yourUsername });logout(): verwendenlogoutRedirect()oderlogoutPopup()stattdessen.
Entfernung von startPerformanceMeasurement()
startPerformanceMeasurement() wurde entfernt. Verwenden Sie stattdessen startMeasurement().
Entfernen von PublicClientNext
Die PublicClientNext Klasse und die statische Methode createPublicClientApplication() wurden in MSAL v5 entfernt. Je nach den Anforderungen Ihrer Anwendung sollten Sie eine der folgenden Alternativen verwenden:
-
PublicClientApplication: Verwenden Sie dies für Standardszenarien mit einer einzelnen App. Dies ist die Standard- und am häufigsten verwendete Verwendung. -
createNestablePublicClientApplication: Verwenden Sie dies, wenn Sie geschachtelte Apps (NAA) unterstützen müssen. Diese Funktion greift automatisch auf eine öffentliche Standardanwendung zurück, wenn die geschachtelte App-Brücke nicht verfügbar ist oder der Hub nicht für die Unterstützung der geschachtelten App-Authentifizierung konfiguriert ist. Weitere Informationen finden Sie unter "Geschachtelte App-Konfiguration ". -
createStandardPublicClientApplication: Verwenden Sie dies, um eine standardmäßige PublicClientApplication-Instanz (nicht NAA) zu instanziieren und zu initialisieren.
Migrationsbeispiel
// BEFORE (using PublicClientNext)
import { PublicClientNext } from "@azure/msal-browser";
const pca = PublicClientNext.createPublicClientApplication(config);
// AFTER (standard usage)
import { PublicClientApplication } from "@azure/msal-browser";
const pca = new PublicClientApplication(config);
await pca.initialize();
// AFTER (nested app support)
import { createNestablePublicClientApplication } from "@azure/msal-browser";
const pca = await createNestablePublicClientApplication(config);
// AFTER (standard)
import { createStandardPublicClientApplication } from "@azure/msal-browser";
const pca = await createStandardPublicClientApplication(config);
Für die meisten Anwendungen reicht das Ersetzen PublicClientNext.createPublicClientApplication(config) durch new PublicClientApplication(config) . Wenn Sie zuvor die supportsNestedAppAuth Konfigurationsoption verwendet haben, migrieren Sie stattdessen zu createNestablePublicClientApplication(config) .
Entfernen der statischen Funktion PublicClientApplication.createPublicClientApplication
Die statische Funktion createPublicClientApplication in PublicClientApplication wurde entfernt und durch eine separat exportierte Funktion createStandardPublicClientApplication ersetzt.
Migrationsbeispiel
// BEFORE
import { PublicClientApplication } from "@azure/msal-browser";
const pca = await PublicClientApplication.createPublicClientApplication(config);
// AFTER
import { createStandardPublicClientApplication } from "@azure/msal-browser";
const pca = await createStandardPublicClientApplication(config);
Konfigurationsänderungen
BrowserAuthOptions-Änderungen
Der
skipAuthorityMetadataCacheParameter wurde aus BrowserAuthOptions in Configuration entfernt.Der
protocolModeParameter wurde in "SystemOptions" anstelle von "BrowserAuthOptions" in "Configuration" verschoben.Der Parameter
supportsNestedAppAuthwurde entfernt. Verwenden Sie stattdessen diecreateNestablePublicClientApplicationAPI für geschachtelte Apps. Weitere Informationen zu geschachtelten Apps finden Sie hier.Der
navigateTologinRequestUrl-Parameter wurde aus BrowserAuthOptions in Configuration entfernt und kann jetzt stattdessen innerhalb eines Optionsobjekts als Parameter im Aufruf vonhandleRedirectPromiseübergeben werden:pca.handleRedirectPromise({ navigateToLoginRequestUrl: false });Der Parameter
encodeExtraQueryParamswurde entfernt. Alle zusätzlichen Abfrageparameter werden codiert.Der Parameter
supportsNestedAppAuthwurde entfernt. Verwenden Sie stattdessencreateNestablePublicClientApplication().// BEFORE const pca = new PublicClientApplication({ auth: { clientId: "your-client-id", authority: "https://login.microsoftonline.com/common" supportsNestedAppAuth: true }, }); // AFTER const pca = await createNestablePublicClientApplication({ auth: { clientId: "your-client-id", authority: "https://login.microsoftonline.com/common" } });Der
OIDCOptions-Parameter akzeptiert jetzt einResponseModeanstelle einesServerResponseType. Bitte verwenden SieResponseMode.QUERYanstelle vonServerResponseType.QUERYundResponseMode.FRAGMENTanstelle vonServerResponseType.FRAGMENT.
CacheOptions-Änderungen
Die folgenden Parameter wurden in MSAL Browser v4 als veraltet eingestuft und in v5 aus CacheOptions entfernt:
temporaryCacheLocation-
claimsBasedCachingEnabled– Zugriffstoken werden nicht mehr basierend auf angeforderten Ansprüchen gespeichert. storeAuthStateInCookie-
secureCookies- Alle Cookies werden jetzt nur noch sicher über HTTPS gesendet. cacheMigrationEnabled
Systemoptionen
- Der
protocolMode-Parameter wurde in der Konfiguration vonBrowserAuthOptionsnachSystemOptionsverschoben. Es gibt keine Änderungen an den Optionen oder Funktionen. - Der Parameter
navigateFrameWaitwurde entfernt. Dies wurde zuvor von älteren Browsern benötigt, die von MSAL.jsnicht mehr unterstützt werden. - Die Parameter
iframeHashTimeoutundwindowHashTimeoutwurden durchiframeBridgeTimeoutbzw.popupBridgeTimeoutersetzt. Diese Timeouts legen jetzt fest, wie lange auf eine Antwort von der Redirect-Bridge über die BroadcastChannel-API gewartet werden soll.
asyncPopups
Der asyncPopups-Parameter wurde in SystemOptions in navigatePopups umbenannt und die Optionen wurden vertauscht. Hiermit wird festgelegt, ob Pop-ups geöffnet und später aufgerufen werden. Bei Festlegung auf "true" werden leere Popups geöffnet und zur Anmeldedomäne navigiert. Wenn dieser Wert auf "false" festgelegt ist, werden Popups direkt in der Anmeldedomäne geöffnet. Dies kann für Szenarien, in denen about:blank nicht unterstützt wird, auf "false" festgelegt werden, z. B. Desktop-Apps oder progressive Web-Apps.
Important
Standardmäßig ist navigatePopups jetzt auf true festgelegt. Wenn Sie zuvor asyncPopups verwendet haben, müssen Sie es jetzt in navigatePopups ändern und Ihre Konfiguration umkehren.
Weitere Informationen finden Sie im Konfigurationsdokument .
Änderungen auf Anfrage
Entfernen des onRedirectNavigate Parameters
Der onRedirectNavigate-Parameter wird künftig nur noch vom Configuration-Objekt unterstützt und aus den RedirectRequest- und EndSessionRequest-Objekten entfernt. Stellen Sie sicher, dass Sie sie in der msal-Konfiguration festlegen, wenn Sie sie verwenden müssen.
Konsolidierung zusätzlicher Anforderungsparameter
Die folgenden Anforderungsparameter wurden entfernt:
authorizePostBodyParamstokenBodyParameterstokenQueryParameters
Um zusätzliche Anforderungsparameter zu vereinfachen, sollten generische zusätzliche Parameter in der neuen extraParameters Anforderungsoption verwendet werden. Wenn extraParameters in einer Anfrage festgelegt sind, werden sie bei allen Aufrufen an den Tokendienst entweder in der URL-Abfragezeichenfolge oder im Anforderungstext gesendet, abhängig von dem in der Anfrage konfigurierten httpMethod (Standard ist GET).
Um zusätzliche Parameter zu senden, die in die URL-Abfragezeichenfolge gehen müssen, extraQueryParameters ist weiterhin verfügbar.
Note
Wenn Sie nicht sicher sind, ob der zusätzliche Parameter in extraQueryStringParameters oder extraParameters eingefügt werden sollte, gehört er höchstwahrscheinlich in extraParameters.
v4 (vorheriges) Anforderungsbeispiel:
// Example of a GET request with extra parameters
const authRequest = {
scopes: ["SAMPLE_SCOPE"],
extraQueryParamters: {
"dc": "DC_VALUE" // This was sent on the query string on GET /authorize
},
tokenBodyParameters: {
"extra_parameters_assertion": "ASSERTION_VALUE" // This was sent on the POST body to /token
},
tokenQueryParamters: {
"slice": "SLICE_VALUE" // This was sent on the query string on POST /token
}
}
// Example of a POST request with extra parameters
const authRequest = {
scopes: ["SAMPLE_SCOPE"],
httpMethod: "POST", // default is "GET" -> Determines method for "/authorize" call. Calls to "/token" are always POST
extraQueryParamters: {
"dc": "DC_VALUE" // This was sent on the query string on POST /authorize
},
authorizePostBodyParameters: {
"extra_parameters_assertion": "ASSERTION_VALUE", // This was sent on the body on POST /authorize
}
tokenBodyParameters: {
"extra_parameters_assertion": "ASSERTION_VALUE" // This was sent on the POST body to /token
},
tokenQueryParamters: {
"slice": "SLICE_VALUE" // This was sent on the query string on POST /token
}
}
v5-Anforderungsbeispiel
// Example of a GET request with extra parameters
const authRequest = {
scopes: ["SAMPLE_SCOPE"],
extraQueryParamters: {
// Will be sent in query string to /authorize and /token
"dc": "DC_VALUE",
"slice": "SLICE_VALUE"
},
extraParameters: {
"extra_parameters_assertion": "ASSERTION_VALUE", // Will be sent in query string to /authorize and in body to /token
},
};
// Example of a POST request with extra parameters
const authRequest = {
scopes: ["SAMPLE_SCOPE"],
httpMethod: "POST", // default is "GET" -> Determines method for "/authorize" call. Calls to "/token" are always POST
extraQueryParamters: {
// Will be sent in query string to /authorize and /token
"dc": "DC_VALUE",
"slice": "SLICE_VALUE"
},
extraParameters: {
extra_parameter_assertion: "assertion_value", // Will be sent in post body to /authorize and /token
},
};
Note
In Fällen, in denen MSAL feststellt, dass extraParameters in die URL-Zeichenfolge codiert werden muss, wird extraParameters mit extraQueryParams auf eine Weise zusammengeführt, die dazu führt, dass gleichnamige Parameter überschrieben werden. In diesen Fällen hat der Wert für den Parameter extraParameters Vorrang vor dem Wert in extraQueryParams.
Unterstützung für die Cross-Origin-Opener-Policy (COOP)
MSAL Browser v5 führt integrierte Unterstützung für Cross-Origin-Opener-Policy (COOP) ein, die die Sicherheit durch Isolieren von Browserkontexten verbessert. Wenn der Authentifizierungsdienst (Microsoft Entra ID oder Azure AD B2C) COOP-Header sendet, werden herkömmliche Popup- und stille Iframe-Authentifizierungsflüsse eingeschränkt. MSAL v5 bietet einen Umleitungsbrückenmechanismus zur Behandlung der Authentifizierung in COOP-fähigen Umgebungen.
Note
Bei Microsoft Entra ID ist COOP standardmäßig aktiviert. Für Azure AD B2C hängt DIE COOP-Verfügbarkeit von Ihrer Back-End-Konfiguration und den verwendeten Authentifizierungsendpunkten ab.
Was hat sich geändert?
Wenn die Antwort des Authentifizierungsdienstes COOP-Header enthält (z. B. Cross-Origin-Opener-Policy: same-origin), schlagen herkömmliche Popup- und stille Iframe-Authentifizierungsabläufe fehl, da das Authentifizierungsfenster nicht mit dem Hauptanwendungsfenster kommunizieren kann. MSAL v5 löst dies durch Die Einführung eines Umleitungsbrückenmusters.
Alle Authentifizierungsflüsse (acquireTokenSilent(), ssoSilent(), loginPopup()und loginRedirect()) verwenden jetzt die Umleitungsbrücke. Die Umleitungsbrücke behandelt die Authentifizierungsantwort je nach Ablauf unterschiedlich:
- Popup- und stille Abläufe: Die Umleitungsbrücke überträgt die Authentifizierungsantwort mithilfe der BroadcastChannel-API an das Hauptfenster der Anwendung.
- Umleitungsfluss: Die Umleitungsbrücke navigiert zurück zur Seite Ihrer Anwendung, die die Umleitung mit der Authentifizierungsantwort in der URL initiiert hat.
Funktionsweise
-
Hauptanwendung: Ihre Anwendung initiiert die Authentifizierung mit
loginPopup(), oderssoSilent()loginRedirect() - Umleitung: MSAL öffnet ein Popup/iframe/Fenster auf eine Autoritätsseite.
- Authentifizierungsfluss: Die Autoritätsseite schließt den OAuth-Fluss ab und empfängt die Authentifizierungsantwort.
-
Antwortbehandlung: Die Umleitungsseite verwendet die neue
broadcastResponseToMainFrame()Funktion, die:- Für Popup-/Silent-Abläufe: Überträgt die Antwort über die BroadcastChannel-API an das Hauptfenster
- Für Umleitungsabläufe: Navigiert zu der Seite zurück, auf der
acquireTokenRedirectmit der Authentifizierungsantwort initiiert wird.
- Tokenerwerb: Die Hauptanwendung empfängt die Antwort und schließt den Tokenerwerb ab.
Schritte bei der Migration
1. Einrichten der Seite "Umleitungsbrücke"
Erstellen Sie eine Seite, die broadcastResponseToMainFrame() von @azure/msal-browser/redirect-bridge aus aufruft. Diese Seite darf nicht mit COOP-Kopfzeilen bedient werden.
Die Einrichtung variiert je nach Build-System – siehe den Leitfaden Redirect-Bridge – frameworkspezifische Einrichtung:
| Rahmen | Approach |
|---|---|
| Angular | Routenkomponente + optionale angular.json Ressourcen |
| Vite | Mehrere Seiten rollupOptions.input |
| Webpack | Separater Eintrag + HtmlWebpackPlugin |
| Next.js | Seitenkomponente aus MsalProvider ausgeschlossen |
| CRA (Create React App) | Statische public/redirect.html Seite |
| Express.js | Serverseitiger COOP-Headerausschluss |
Siehe auch:Überlegungen zu Umleitungs-URIs | Fehler vom Typ interaction_in_progress in Popupinteraktionen | MDN: COOP
2. Aktualisieren Der MSAL-Konfiguration
Zeigen Sie redirectUri auf eine neue Umleitungsbrückesseite:
const msalConfig = {
auth: {
clientId: "{your-client-id}",
authority: "https://login.microsoftonline.com/common",
redirectUri: "https://{your-app-home-page}/redirect",
},
};
Important
Sie MÜSSEN auch den Umleitungs-URI in Ihrer Entra ID App-Registrierung aktualisieren.
Der URI muss exakt übereinstimmen – einschließlich Pfad, Protokoll und Port.
Andernfalls kommt es zu redirect_uri_mismatch Fehlern.
Verhaltensgebrochene Änderungen
Ereignistypen und InteractionStatus-Änderungen
Wir haben Ereignistypen und InteractionStatus konsolidiert, sodass sie widerspiegeln, was passiert ist, statt in welcher API dies geschehen ist.
-
SSO_SILENTundACQUIRE_TOKEN_BY_CODEEreignisse wurden durchACQUIRE_TOKENEreignisse ersetzt (START/SUCCESS/FAILUREVarianten) -
ACCOUNT_ADDEDundACCOUNT_REMOVEDwurden durchLOGIN_SUCCESSbzwLOGOUT_SUCCESS. ersetzt. -
LOGIN_STARTundLOGIN_FAILUREwurden durchACQUIRE_TOKEN_STARTbzwACQUIRE_TOKEN_FAILURE. ersetzt. - Die Nutzlast für
LOGIN_SUCCESSist jetzt einAccountInfoObjekt. - Jede erfolgreiche Anmeldung löst jetzt sowohl ein
LOGIN_SUCCESS- als auch einACQUIRE_TOKEN_SUCCESS-Ereignis aus.
LOGIN_SUCCESS Nutzlasttypmigration
Wenn Ihr Ereignis-Callback derzeit LOGIN_SUCCESSNutzlasten in AuthenticationResult umwandelt, aktualisieren Sie ihn so, dass für LOGIN_SUCCESSAccountInfo verwendet wird und AuthenticationResult für ACQUIRE_TOKEN_SUCCESS reserviert bleibt.
// BEFORE (v4-style assumption)
import {
EventType,
AuthenticationResult,
} from "@azure/msal-browser";
pca.addEventCallback((event) => {
if (event.eventType === EventType.LOGIN_SUCCESS) {
const result = event.payload as AuthenticationResult;
setAccount(result.account); // Will silently fail in v5 where payload is AccountInfo, not AuthenticationResult
}
});
// AFTER (v5-safe handling)
import {
EventType,
AuthenticationResult,
AccountInfo,
} from "@azure/msal-browser";
pca.addEventCallback((event) => {
if (event.eventType === EventType.LOGIN_SUCCESS) {
const account = event.payload as AccountInfo;
setAccount(account);
}
if (event.eventType === EventType.ACQUIRE_TOKEN_SUCCESS) {
const result = event.payload as AuthenticationResult;
setAccessToken(result.accessToken);
}
});
Änderungen des Fehlermeldungsformats
Um die Größe des Bündels zu verringern, wurden Fehlermeldungen aus dem Bundle verschoben. Wenn ein Fehler ausgelöst wird, gibt die message Eigenschaft jetzt einen generischen Link zur Fehlerdokumentation anstelle einer beschreibenden Fehlermeldung zurück:
// BEFORE (v4)
error.message = "Token request cannot be made without authorization code or refresh token.";
// AFTER (v5)
error.message = "See https://aka.ms/msal.js.errors#request_cannot_be_made for details";
Die errorCode Eigenschaft bleibt unverändert und kann weiterhin verwendet werden, um den spezifischen Fehler zu identifizieren. Ausführliche Fehlerbeschreibungen finden Sie in der Fehlerdokumentation.
Important
Wenn Ihre Anwendung auf die Auswertung oder Anzeige der error.message-Eigenschaft angewiesen ist, müssen Sie Ihren Fehlerbehandlungscode möglicherweise aktualisieren, um stattdessen errorCode zu verwenden oder Benutzer auf den Link zur Dokumentation zu verweisen.
Aktualisieren von Fehlerbehandlungscode
Wenn Sie Benutzern Fehler anzeigen, ordnen Sie errorCode benutzerfreundlichen Meldungen zu, anstatt error.message direkt anzuzeigen:
// BEFORE (v4)
showError(error.message);
// AFTER (v5) — use errorCode for user-facing messages
const userMessages = {
request_cannot_be_made: "Please sign in again to continue.",
interaction_required: "Additional verification is needed.",
consent_required: "Administrator approval is required for this action.",
login_required: "Your session has expired. Please sign in again.",
// Add mappings for error codes your application encounters
};
showError(userMessages[error.errorCode] || "An authentication error occurred.");
Wenn Sie Fehler für bedingte Logik analysieren, wechseln Sie von Zeichenfolgenabgleich message zum Vergleich errorCode (dies war bereits der empfohlene Ansatz in v4):
// BEFORE (v4) — fragile, relied on message text
if (error.message.includes("interaction_required")) {
await msalInstance.acquireTokenPopup(request);
}
// AFTER (v5) — use errorCode (stable across versions)
if (error.errorCode === "interaction_required") {
await msalInstance.acquireTokenPopup(request);
}
Wenn Sie Fehler zur Diagnose protokollieren, fügen Sie sowohl errorCode als auch message ein (die Nachricht enthält jetzt einen direkten Link zur zugehörigen Dokumentation):
// AFTER (v5) — log errorCode for programmatic use, message for the docs link
logger.error(`MSAL Error [${error.errorCode}]: ${error.message}`);
// Output: MSAL Error [request_cannot_be_made]: See https://aka.ms/msal.js.errors#request_cannot_be_made for details
Tip
Die errorCode Werte sind identisch zwischen v4 und v5 – nur das message Format hat sich geändert. Wenn Ihr vorhandener Code bereits auf errorCode verzweigt, sind keine Änderungen erforderlich.
Änderungen an der Konsolenprotokollierung
Um die Bündelgröße zu verringern, werden jetzt Konsolenprotokollmeldungen mit Hash versehen. Anstatt vollständige Protokollmeldungen in der Browserkonsole anzuzeigen, wird ein Hashwert angezeigt:
// BEFORE (v4)
[Wed, 15 Jan 2025 10:30:45 GMT] : abc-123 : @azure/msal-browser@4.27.0 : Info - Returning token from cache
// AFTER (v5)
[Wed, 15 Jan 2025 10:30:45 GMT] : abc-123 : @azure/msal-browser@5.0.0 : Info - 7f3a9b2c
Für das Debuggen in der Browserkonsole ist ein zusätzlicher Schritt erforderlich, um Protokolle zu decodieren. Um gehashte Protokolle wieder in lesbare Meldungen zu decodieren, verwenden Sie das decode script. Weitere Informationen zur Verwendung des Decodierungsskripts finden Sie in der Skriptdokumentation.