Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pokud s MSAL začínáte, měli byste začít tady. Pokud pocházíte z MSAL verze 1.x, můžete podle tohoto průvodce aktualizovat kód tak, aby používal MSAL v2.x.
1. Aktualizace registrace aplikace
Přejděte na Centrum pro správu Microsoft Entra vašeho tenanta a zkontrolujte registrace aplikací. Můžete vytvořit novou registraci pro MSAL 2.x nebo můžete aktualizovat stávající registraci pro registraci, kterou používáte pro MSAL 1.x.
2. Přidání msal-browser balíčku do projektu
Pomocí npm použijte následující:
npm install @azure/msal-browser
3. Aktualizace kódu
V MSAL 1.x jste vytvořili instanci aplikace následujícím způsobem:
import * as msal from "msal";
const msalInstance = new msal.UserAgentApplication(config);
V MSAL 2.x můžete aktualizovat tak, aby používal nový PublicClientApplication objekt.
import * as msal from "@azure/msal-browser";
const msalInstance = new msal.PublicClientApplication(config);
V objektu konfigurace, který se předává, může existovat několik malých rozdílů. Pokud objektu předáváte pokročilejší konfiguraci UserAgentApplication , další informace o nových možnostech konfigurace objektu aplikace najdete tady .
Podpisy objektů požadavků a odpovědí se změnily – acquireTokenSilent teď má samostatný podpis objektu od interaktivních rozhraní API. Další informace o konfiguraci rozhraní API požadavků najdete tady .
Většina rozhraní API z MSAL 1.x se přenesla do MSAL 2.x beze změny. Některé funkce byly odebrány:
handleRedirectCallbackurlContainsHashgetCurrentConfigurationgetLoginInProgressgetAccountgetAccountStateisCallback
V MSAL 2.x je zpracování odpovědi z hodnoty hash asynchronní operace, protože MSAL provede výměnu tokenů, jakmile parsuje autorizační kód z odpovědi. Proto při voláních přesměrování MSAL poskytuje funkci handleRedirectPromise, která vrátí příslib, jenž se splní, jakmile MSAL přesměrování zcela zpracuje. Při použití metody přesměrování se stránka použitá jako redirectUri musí implementovat handleRedirectPromise , aby se zajistilo, že se odpověď zpracuje a tokeny se při vrácení z přesměrování ukládají do mezipaměti.
const myMSALObj = new msal.PublicClientApplication(msalConfig);
// Register Callbacks for Redirect flow
myMSALObj.handleRedirectPromise().then((tokenResponse) => {
let accountObj = null;
if (tokenResponse !== null) {
accountObj = tokenResponse.account;
const id_token = tokenResponse.idToken;
const access_token = tokenResponse.accessToken;
} else {
const currentAccounts = myMSALObj.getAllAccounts();
if (!currentAccounts || currentAccounts.length === 0) {
// No user signed in
return;
} else if (currentAccounts.length > 1) {
// More than one user signed in, find desired user with getAccountByUsername(username)
} else {
accountObj = currentAccounts[0];
}
}
const username = accountObj.username;
}).catch((error) => {
handleError(error);
});
function signIn() {
myMSALObj.loginRedirect(loginRequest);
}
async function getTokenRedirect(request) {
return await myMSALObj.acquireTokenSilent(request).catch(error => {
this.logger.info("silent token acquisition fails. acquiring token using redirect");
// fallback to interaction when silent call fails
return myMSALObj.acquireTokenRedirect(request)
});
}
Během volání loginPopup, acquireTokenPopup nebo acquireTokenSilent můžete počkat na dokončení promisu.
const myMSALObj = new msal.PublicClientApplication(msalConfig);
async function signIn(method) {
try {
const loginResponse = await myMSALObj.loginPopup(loginRequest);
} catch (err) {
handleError(error);
}
const currentAccounts = myMSALObj.getAllAccounts();
if (!currentAccounts || currentAccounts.length === 0) {
// No user signed in
return;
} else if (currentAccounts.length > 1) {
// More than one user signed in, find desired user with getAccountByUsername(username)
} else {
accountObj = currentAccounts[0];
}
}
async function getTokenPopup(request) {
return await myMSALObj.acquireTokenSilent(request).catch(async (error) => {
this.logger.info("silent token acquisition fails. acquiring token using popup");
// fallback to interaction when silent call fails
return await myMSALObj.acquireTokenPopup(request).catch(error => {
handleError(error);
});
});
}
Podrobnější informace o využití najdete v dokumentaci k přihlášení a získání tokenů .
Obnovovací tokeny se teď vrací jako součást odpovědí na tokeny a knihovna je používá k obnovení přístupových tokenů bez interakce nebo použití prvků iframe. Další informace o obnovování tokenů najdete v dokumentaci k životnosti tokenů.
Všechna ostatní rozhraní API by měla fungovat stejně jako předtím. Doporučujeme podívat se na výchozí ukázkový projekt, abyste viděli funkční příklad použití MSAL 2.0.