Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Если вы не знакомы с MSAL, вы должны начать здесь. Если вы переходите с MSAL версии 1.x, вы можете воспользоваться этим руководством, чтобы обновить свой код для использования MSAL версии 2.x
1. Обновление регистрации приложения
Перейдите в центр администрирования Microsoft Entra для вашего арендатора и просмотрите раздел «Регистрации приложений». Вы можете создать новую регистрацию для MSAL 2.x или обновить существующую регистрацию для регистрации, которую вы используете для MSAL 1.x.
2. Добавление msal-browser пакета в проект
Используя npm, используйте следующее:
npm install @azure/msal-browser
3. Обновление кода
В MSAL 1.x вы создали экземпляр приложения, как показано ниже:
import * as msal from "msal";
const msalInstance = new msal.UserAgentApplication(config);
В MSAL 2.x это можно обновить, чтобы использовать новый PublicClientApplication объект.
import * as msal from "@azure/msal-browser";
const msalInstance = new msal.PublicClientApplication(config);
В объекте конфигурации может быть несколько небольших различий. Если вы передаете более расширенную конфигурацию UserAgentApplication объекту, дополнительные сведения о новых параметрах конфигурации объектов приложения см. здесь .
Сигнатуры объектов запросов и ответов изменились — acquireTokenSilent теперь имеет отдельную сигнатуру объекта, отличную от интерактивных API. Дополнительные сведения о настройке API запросов см. здесь .
Большинство API из MSAL 1.x были перенесены в MSAL 2.x без изменений. Некоторые функции удалены:
handleRedirectCallbackurlContainsHashgetCurrentConfigurationgetLoginInProgressgetAccountgetAccountStateisCallback
В MSAL 2.x обработка ответа от хэша является асинхронной операцией, так как MSAL выполнит обмен маркерами, как только он анализирует код авторизации из ответа. Из-за этого при выполнении вызовов с перенаправлением MSAL предоставляет функцию handleRedirectPromise, которая возвращает промис, завершающийся после того, как MSAL полностью обработает перенаправление. При использовании метода перенаправления страница, используемая в качестве redirectUri, должна реализовывать handleRedirectPromise, чтобы гарантировать обработку ответа и кэширование токенов при возврате после перенаправления.
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)
});
}
Во время loginPopup, acquireTokenPopupили acquireTokenSilent вызовы, вы можете ждать, пока обещание будет разрешено.
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);
});
});
}
Дополнительные сведения об использовании см. в документации по входу и получению маркеров .
Теперь токены обновления возвращаются в ответах с токенами и используются библиотекой для обновления токенов доступа без взаимодействия с пользователем и без использования iframe. Дополнительные сведения о продлении маркеров см. в документации по времени существования маркеров .
Все остальные API должны работать как раньше. Рекомендуется ознакомиться с примером по умолчанию , чтобы просмотреть рабочий пример MSAL 2.0.