Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Use a biblioteca MSAL.js com autenticação de aplicativo aninhada (NAA) para habilitar o logon único (SSO) a partir do seu Suplemento do Office. Os procedimentos neste artigo orientam você na criação de um registro de aplicativo e na adição de código ao seu projeto para usar o NAA.
Hosts e contas com suporte da NAA
O NAA dá suporte a contas da Microsoft e identidades do Microsoft Entra ID (trabalho/escola). Ele não dá suporte ao Azure Active Directory B2C para cenários de gerenciamento de identidade business-to-consumer. Para obter mais informações sobre os requisitos do NAA, consulte Conjunto de requisitos de autenticação de aplicativo aninhado.
Registrar seu aplicativo de página única
Você precisará criar um registro do Microsoft Azure Azure App para seu suplemento no portal do Azure. O registro do aplicativo deve ter no mínimo:
- Um nome
- Um tipo de conta com suporte
- Um redirecionamento de SPA para NAA
Se o suplemento exigir registro de aplicativo adicional além do NAA e do SSO, consulte Aplicativo de página única: registro de aplicativo.
Adicionar um agente confiável por meio do redirecionamento de SPA
Para habilitar o NAA, o registro do aplicativo deve incluir um URI de redirecionamento específico para indicar à plataforma de identidade da Microsoft que seu suplemento permite ser intermediado por hosts com suporte. O URI de redirecionamento do aplicativo deve ser do tipo Aplicativo de Página Única e estar em conformidade com o esquema a seguir.
brk-multihub://your-add-in-domain
Seu domínio deve incluir apenas a origem e não seus subcaminhos. Por exemplo:
✔️ brk-multihub://localhost:3000
✔️ brk-multihub://www.contoso.com
❌ brk-multihub://www.contoso.com/go
Os grupos de agentes confiáveis são dinâmicos por design e podem ser atualizados no futuro para incluir hosts adicionais nos quais o suplemento possa usar fluxos NAA. Atualmente, o grupo brk-multihub inclui Word, Excel, PowerPoint, Outlook e Teams (para quando o Office for ativado internamente).
Importante
Para o Word, Excel e PowerPoint na Web, você também precisa de um redirecionamento adicional, já que o navegador usa um fluxo de autenticação padrão. O URI de redirecionamento do SPA deve fazer referência à página HTML na qual você usará a biblioteca MSAL.js para solicitar tokens por meio do NAA.
Use as etapas a seguir para configurar um registro de aplicativo para seu suplemento do Office.
Entre no portal do Azure com as credenciais de administrador para sua locação do Microsoft 365. Por exemplo, MyName@contoso.onmicrosoft.com.
Selecione Registros de aplicativos. Se você não vir o ícone, procure por "registro do aplicativo" na barra de pesquisa.
A página Registros de aplicativo é exibida.
Selecione Novo registro.
A página Registrar um aplicativo é exibida.
Na página Registrar um aplicativo, defina os valores da seguinte forma.
- Defina Nome para
contoso-office-add-in-sso. - Defina tipos de conta com suporte para Contas em qualquer diretório organizacional (qualquer diretório do Azure AD – multilocatário) e contas pessoais da Microsoft (por exemplo, Skype, Xbox).
- Defina o URI de redirecionamento para usar o aplicativo de página única (SPA) da plataforma e o URI como
brk-multihub://localhost:3000. Esse redirecionamento pressupõe que você esteja testando seu suplemento a partir de um servidor localhost.
- Defina Nome para
Selecione Registrar. É exibida uma mensagem informando que o registro do aplicativo foi criado.
Copie e salve o valor para a ID do aplicativo (cliente). Você a usará em um procedimento posterior.
Se o suplemento der suporte ao Word, Excel ou PowerPoint na Web, você deverá adicionar um URI de redirecionamento de SPA para a página do painel de tarefas. Use as etapas a seguir para adicionar um URI de redirecionamento de SPA para sua página do painel de tarefas.
- No painel esquerdo, selecione Gerenciar > Autenticação.
- Na seção Configurações da plataforma , há uma lista de URIs de redirecionamento de aplicativo de página única.
- Selecione Adicionar URI.
- Insira
https://localhost:3000/taskpane.htmle selecione Salvar. Esse URI de redirecionamento pressupõe que você esteja usando o NAA dotaskpane.htmlarquivo.
Configurar MSAL para usar NAA
Configure seu suplemento para usar o NAA chamando a createNestablePublicClientApplication função no MSAL. A MSAL retorna um aplicativo cliente público que pode ser aninhado em um host de aplicativo nativo (por exemplo, Outlook) para adquirir tokens para seu aplicativo.
As etapas a seguir mostram como habilitar o taskpane.js NAA no arquivo ou taskpane.ts em um projeto criado com yo office (projeto do Painel de Tarefas do Suplemento do Office ).
Adicione o
@azure/msal-browserpacote àdependenciesseção dopackage.jsonarquivo para seu projeto. Para obter mais informações sobre esse pacote, consulte Biblioteca de Autenticação da Microsoft para JavaScript (MSAL.js) para Aplicativos Browser-Based Single-Page. Para instalar a versão mais recente, execute o seguinte comando.npm install @azure/msal-browserAdicione o código a seguir à parte superior do
taskpane.jsarquivo outaskpane.ts. Isso importará a biblioteca do navegador MSAL.import { createNestablePublicClientApplication, InteractionRequiredAuthError } from "@azure/msal-browser";
As etapas a seguir são diferentes para o Outlook e para o Word, Excel e PowerPoint. Selecione a guia que corresponde ao tipo de suplemento que você está criando.
Inicializar a biblioteca MSAL
Em seguida, você precisa inicializar a MSAL e obter uma instância do aplicativo cliente público.
Adicione o código a seguir ao taskpane.js arquivo ou taskpane.ts . Substitua o espaço reservado Enter_the_Application_Id_Here pela ID do aplicativo do Azure que você salvou anteriormente. Sobre a seguinte observação de código:
- A
initMsalfunção inicializa MSAL chamandocreateNestablePublicClientApplication. Isso cria um aplicativo cliente público aninhado que oferece suporte ao SSO com o Outlok. - A
initMsalfunção define a autoridade como comum, que dá suporte a contas corporativas e de estudante ou contas pessoais da Microsoft. Se você quiser configurar um único locatário ou outros tipos de conta, consulte Opções de configuração do aplicativo para obter opções de autoridade adicionais.
let msalInstance = undefined;
/**
* Initialize MSAL as a nestable public client application.
*/
async function initMsal() {
if (!msalInstance) {
const clientId = "Enter_the_Application_Id_Here";
const msalConfig = {
auth: {
clientId: clientId,
authority: "https://login.microsoftonline.com/common"
},
cache: {
cacheLocation: "localStorage"
}
};
msalInstance = await createNestablePublicClientApplication(msalConfig);
}
}
Adquira seu primeiro token
Os tokens adquiridos pelo MSAL.js via NAA serão emitidos para sua ID de registro do aplicativo Azure. Nesta amostra de código, você adquire um token para a API do Graph. Se o usuário tiver uma sessão ativa com o Microsoft Entra ID, o token será adquirido silenciosamente. Caso contrário, a biblioteca solicitará que o usuário entre interativamente. O token é então usado para chamar a API do Graph.
As etapas a seguir mostram o padrão a ser usado para adquirir um token.
- Especifique seus escopos. O NAA dá suporte ao consentimento incremental e dinâmico, portanto, sempre solicite os escopos mínimos necessários para que seu código conclua sua tarefa.
- Chamar
acquireTokenSilent. Isso obterá o token sem exigir interação do usuário. - Se
acquireTokenSilentfalhar, chameacquireTokenPopuppara exibir uma caixa de diálogo interativa para o usuário.acquireTokenSilentpoderá falhar se o token tiver expirado ou se o usuário ainda não tiver consentido com todos os escopos solicitados.
O código a seguir mostra como implementar esse padrão de autenticação em seu próprio projeto.
Substitua a
runfunção notaskpane.jscódigo a seguir outaskpane.tspelo seguinte. O código especifica os escopos mínimos necessários para ler os arquivos do usuário.export async function run() { await initMsal(); // Specify minimum scopes needed for the access token. const tokenRequest = { scopes: ["Files.Read", "User.Read"], }; let accessToken = null; // TODO 1: Use msalInstance to get an access token. // TODO 2: Call the Microsoft Graph API. }Importante
A solicitação de token deve incluir escopos diferentes de apenas
offline_access,openid,profile, ouemail. Você pode usar qualquer combinação dos escopos anteriores, mas deve incluir pelo menos um escopo adicional. Caso contrário, a solicitação de token poderá falhar.Substitua
TODO 1pelo código a seguir. Esse código chamaacquireTokenSilentpara obter o token de acesso.try { const userAccount = await msalInstance.acquireTokenSilent(tokenRequest); console.log("Acquired token silently."); accessToken = userAccount.accessToken; } catch (silentError) { // TODO 1a: Handle acquireTokenSilent failure. }Substitua
TODO 1apelo código a seguir. Este código verifica seacquireTokenSilentfoi lançado umInteractionRequiredAuthErrordomínio . Nesse caso, o código chamaacquireTokenPopuppara que a MSAL possa usar uma caixa de diálogo pop-up para interagir com o usuário. A interação pode ser necessária por vários motivos, como a conclusão da autorização multifator.if (silentError instanceof InteractionRequiredAuthError) { console.log(`Unable to acquire token silently: ${silentError}`); // Silent acquisition failed. Continue to interactive acquisition. try { const userAccount = await msalInstance.acquireTokenPopup(tokenRequest); console.log("Acquired token interactively."); accessToken = userAccount.accessToken; } catch (popupError) { // Acquire token interactive failure. console.error(`Unable to acquire token interactively: ${popupError}`); return; } } else { // Acquire token silent failure. Error can't be resolved through interaction. console.error(`Unable to acquire token silently: ${silentError}`); return; }
Chamar uma API
Depois de adquirir o token, use-o para chamar uma API. O exemplo a seguir mostra como chamar a API do Graph chamando fetch com o token anexado no cabeçalho Autorização.
Substitua
TODO 2pelo código a seguir.// Call the Microsoft Graph API with the access token. const response = await fetch( `https://graph.microsoft.com/v1.0/me/drive/root/children?$select=name&$top=10`, { headers: { Authorization: `Bearer ${accessToken}` }, } ); if (response.ok) { // Write file names to the console. const data = await response.json(); const names = data.value.map((item) => item.name); // Be sure the taskpane.html has an element with Id = item-subject. const label = document.getElementById("item-subject"); // Write file names to task pane and the console. const nameText = names.join(", "); if (label) label.textContent = nameText; console.log(nameText); } else { const errorText = await response.text(); console.error("Microsoft Graph call failed - error text: " + errorText); }
Depois que todo o código anterior for adicionado à run função, verifique se um botão no painel de tarefas chama a run função. Em seguida, você pode fazer sideload do suplemento e experimentar o código.
O que é autenticação de aplicativo aninhado
A autenticação de aplicativo aninhado permite o SSO para aplicativos aninhados dentro de aplicativos da Microsoft com suporte. Por exemplo, o Excel no Windows executa seu suplemento dentro de um modo de exibição da Web. Nesse cenário, o suplemento é um aplicativo aninhado em execução no Excel, que é o host. A NAA também dá suporte a aplicativos aninhados no Teams. Por exemplo, se uma guia do Teams estiver hospedando o Excel e seu suplemento estiver carregado, ele estará aninhado no Excel, que também estará aninhado no Teams. Novamente, o NAA dá suporte a esse cenário aninhado e você pode acessar o SSO para obter a identidade do usuário e os tokens de acesso do usuário conectado.
Práticas recomendadas
Recomendamos as seguintes práticas recomendadas ao usar MSAL.js com NAA.
Use autenticação silenciosa sempre que possível
MSAL.js fornece o método que lida com a acquireTokenSilent renovação de token fazendo solicitações silenciosas de token sem perguntar ao usuário. Primeiro, o método procura um token válido em cache. Se não encontrar um, a biblioteca faz a solicitação silenciosa ao Microsoft Entra ID e, se houver uma sessão de usuário ativa, um novo token será retornado.
Em determinados casos, a acquireTokenSilent tentativa do método de obter o token falha. Alguns exemplos disso são quando há uma sessão de usuário expirada com o Microsoft Entra ID ou uma alteração de senha pelo usuário, o que requer interação do usuário. Quando o acquireTokenSilent falhar, você precisará chamar o método de token interativo acquireTokenPopup .
Ter um fallback quando o NAA não tiver suporte
Embora nos esforcemos para fornecer um alto grau de compatibilidade com esses fluxos no ecossistema da Microsoft, seu suplemento pode estar carregado em um host do Office mais antigo que não dá suporte a NAA. Nesses casos, seu suplemento não dará suporte ao SSO contínuo e talvez seja necessário recorrer a um método alternativo de autenticação do usuário. Consulte os exemplos de código neste artigo para obter exemplos que mostram como lidar com um cenário de fallback.
Use o código a seguir para marcar se há suporte para NAA quando o suplemento é carregado.
Office.context.requirements.isSetSupported("NestedAppAuth", "1.1");
Para obter mais informações, consulte os seguintes recursos.
- Autentique e autorize com a API de caixa de diálogo do Office.
- Exemplo de identidade da Microsoft para SPA e JavaScript
- Exemplos de identidade da Microsoft para vários tipos de aplicativo e estruturas
APIs MSAL.js suportadas pelo NAA
A tabela a seguir mostra quais APIs têm suporte quando o NAA está habilitado na configuração MSAL.
| Método | Suporte da NAA |
|---|---|
acquireTokenByCode |
Não (gera exceção) |
acquireTokenPopup |
Sim |
acquireTokenRedirect |
Não (gera exceção) |
acquireTokenSilent |
Sim |
addEventCallback |
Sim |
addPerformanceCallback |
Não (gera exceção) |
disableAccountStorageEvents |
Não (gera exceção) |
enableAccountStorageEvents |
Não (gera exceção) |
getAccountByHomeId |
Sim |
getAccountByLocalId |
Sim |
getAccountByUsername |
Sim |
getActiveAccount |
Sim |
getAllAccounts |
Sim |
getConfiguration |
Sim |
getLogger |
Sim |
getTokenCache |
Não (gera exceção) |
handleRedirectPromise |
Não |
initialize |
Sim |
initializeWrapperLibrary |
Sim |
loginPopup |
Sim |
loginRedirect |
Não (gera exceção) |
logout |
Não (gera exceção) |
logoutPopup |
Não (gera exceção) |
logoutRedirect |
Não (gera exceção) |
removeEventCallback |
Sim |
removePerformanceCallback |
Não (gera exceção) |
setActiveAccount |
Não |
setLogger |
Sim |
ssoSilent |
Sim |
Relatórios de segurança
Se você encontrar um problema de segurança com nossas bibliotecas ou serviços, relate o problema secure@microsoft.com com o máximo de detalhes que você puder oferecer. Seu envio pode se qualificar para uma recompensa por meio do programa Microsoft Bounty . Não poste problemas de segurança no GitHub ou em qualquer outro site público. Entraremos em contato com você logo após recebermos o relatório de problemas. Encorajamos você a receber novas notificações de incidentes de segurança visitando as notificações técnicas de segurança da Microsoft para assinar os Alertas de Comunicado de Segurança.
Exemplos de código
| Nome do exemplo | Descrição |
|---|---|
| Suplemento do Office com SSO usando autenticação de aplicativo aninhado | Mostra como usar o NAA em um Suplemento do Office para acessar APIs do Microsoft Graph para o usuário conectado. |
| Suplemento do Outlook com SSO usando autenticação de aplicativo aninhado | Mostra como usar o NAA em um Suplemento do Outlook para acessar APIs do Microsoft Graph para o usuário conectado. |
| Implementar o SSO em eventos em um suplemento do Outlook usando a autenticação de aplicativo aninhado | Mostra como usar NAA e SSO em eventos de suplemento do Outlook. |
| Enviar declarações de identidade aos recursos usando a autenticação de aplicativo aninhado (NAA) e o SSO | Mostra como enviar as declarações de identidade do usuário conectado (como nome, email ou uma ID exclusiva) para um recurso, como um banco de dados. Este exemplo substitui um padrão obsoleto por tokens herdados do Exchange Online. |
Confira também
- Perguntas frequentes sobre o NAA
- Autenticação de aplicativo aninhado no Microsoft Teams.
- Exemplo do Outlook: Como fazer fallback e dar suporte ao Internet Explorer 11
- Autentique e autorize com a API de caixa de diálogo do Office.
- Exemplo de identidade da Microsoft para SPA e JavaScript
- Exemplos de identidade da Microsoft para vários tipos de aplicativo e estruturas
- Plataforma de identidade da Microsoft e Fluxo On-Behalf-Of do OAuth 2.0