Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Se você for novo no MSAL, comece aqui. Se você estiver vindo da MSAL v1.x, poderá seguir este guia para atualizar seu código para usar MSAL v2.x
1. Atualizar o registro do aplicativo
Acesse o centro de administração do Microsoft Entra para seu locatário e revise os registros de aplicativo. Você pode criar um novo registro para MSAL 2.x ou atualizar seu registro existente para o registro que está usando para MSAL 1.x.
2. Adicionar o msal-browser pacote ao seu projeto
Usando o npm, use o seguinte:
npm install @azure/msal-browser
3. Atualize seu código
No MSAL 1.x, você criou uma instância de aplicativo como abaixo:
import * as msal from "msal";
const msalInstance = new msal.UserAgentApplication(config);
No MSAL 2.x, você pode atualizá-lo para usar o novo PublicClientApplication objeto.
import * as msal from "@azure/msal-browser";
const msalInstance = new msal.PublicClientApplication(config);
Pode haver algumas pequenas diferenças no objeto de configuração que é passado. Se você estiver passando uma configuração mais avançada para o UserAgentApplication objeto, consulte aqui para obter mais informações sobre as novas opções de configuração de objeto de aplicativo.
As assinaturas de objeto de solicitação e resposta foram alteradas– acquireTokenSilent agora tem uma assinatura de objeto separada das APIs interativas. Confira aqui mais informações sobre como configurar as APIs de solicitação.
A maioria das APIs da MSAL 1.x foi encaminhada para a MSAL 2.x sem alteração. Algumas funções foram removidas:
handleRedirectCallbackurlContainsHashgetCurrentConfigurationgetLoginInProgressgetAccountgetAccountStateisCallback
No MSAL 2.x, lidar com a resposta do hash é uma operação assíncrona, pois a MSAL executará uma troca de tokens assim que analisar o código de autorização da resposta. Por isso, ao executar chamadas de redirecionamento, a MSAL fornece a handleRedirectPromise função que retornará uma promessa que será resolvida quando o redirecionamento for totalmente tratado pela MSAL. Ao usar um método de redirecionamento, a página usada como redirectUri deve implementar handleRedirectPromise para garantir que a resposta seja tratada e que os tokens sejam armazenados em cache ao retornar do redirecionamento.
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)
});
}
Durante as chamadas loginPopup, acquireTokenPopup ou acquireTokenSilent, você pode aguardar a resolução da promessa.
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);
});
});
}
Consulte os documentos de logon e aquisição de token para obter informações mais detalhadas sobre o uso.
Os tokens de atualização agora são retornados como parte das respostas de token e são usados pela biblioteca para renovar os tokens de acesso sem interação ou o uso de iframes. Consulte os documentos de tempo de vida do token para obter mais informações sobre a renovação de tokens.
Todas as outras APIs devem funcionar como antes. É recomendável dar uma olhada no exemplo padrão para ver um exemplo de trabalho do MSAL 2.0.