Exercício – Criar um suplemento do Office para o Outlook que implementa o logon único

Concluído

Neste exercício, você criará um suplemento do Outlook que adiciona uma lista de eventos de calendário futuros ao corpo de um email pelo usuário conectado com o Microsoft Graph. Esse processo usa o esquema de autenticação de SSO (logon único).

Pré-requisitos

O desenvolvimento de Suplementos do Office para o Microsoft Outlook requer o cliente Web ou os seguintes clientes da área de trabalho:

  • Windows v16.0.12215.20006 (ou superior)
  • macOS v16.32.19102902 (ou superior)

Você usará o Node.js para criar o suplemento personalizado do Outlook neste módulo. Os exercícios neste módulo presumem que você tenha as seguintes ferramentas instaladas em sua estação de trabalho de desenvolvedor:

Importante

Na maioria dos casos, instalar a versão mais recente das ferramentas a seguir é a melhor opção. As versões listadas aqui foram usadas quando este módulo foi publicado e testado pela última vez.

Você deve ter as versões mínimas desses pré-requisitos instaladas em sua estação de trabalho.

Importante

Este exercício é escrito para trabalhar com o Gerador yeoman para o Microsoft Office v1.8.8. Verifique se você está usando essa versão instalando uma versão específica usando o comando npm install generator-office@1.8.8 --global. Versões posteriores do gerador foram removidas e, em seguida, alteraram os scaffolding do projeto SSO que não correspondem às etapas neste laboratório.

Importante

O exemplo neste exercício destina-se a ser usado apenas como um recurso de aprendizado e não se destina a ser usado em um cenário de produção porque passa o token OAuth usado para enviar solicitações ao Microsoft Graph de volta ao cliente para fazer a chamada diretamente.

Como prática de segurança, sempre use o código ao lado do servidor para fazer chamadas pelo Microsoft Graph ou outras chamadas que exigem a passagem de um token de acesso. Nunca retorne o token OBO ao cliente para permitir que o cliente faça chamadas diretas ao Microsoft Graph. Isso ajuda a proteger o token de ser interceptado ou vazado. Para obter mais informações sobre o fluxo de protocolo adequado, consulte o diagrama de protocolo OAuth 2.0.

Criar seu projeto do suplemento

Execute o seguinte comando para criar um projeto de suplemento usando o gerador Yeoman:

yo office

Observação

Ao executar o comando yo office, você receberá informações sobre as políticas de coleta de dados de Yeoman e as ferramentas da CLI do suplemento do Office. Use as informações fornecidas para responder às solicitações como achar melhor.

Quando solicitado, forneça as seguintes informações para criar seu projeto de suplemento:

  • Selecione um tipo de projeto: projeto do painel de tarefas do suplemento do Office com suporte para logon único
  • Selecione um tipo de script: JavaScript
  • Qual será o nome do suplemento? MyOutlookSsoAddin
  • Você gostaria de proporcionar suporte para qual aplicativo cliente do Office? Outlook

Captura de tela dos prompts e respostas do gerador Yeoman.

Depois que você concluir o prompt, o gerador criará o projeto e instalará os componentes Node de suporte.

Registrar o aplicativo Microsoft Entra

Em seguida, registre o aplicativo Microsoft Entra e atualize o projeto para usar o aplicativo Microsoft Entra.

Dica

Para obter detalhes sobre como registrar o aplicativo Microsoft Entra manualmente, confira: Criar um suplemento do Office Node.js que usa logon único: registre o suplemento com Azure AD ponto de extremidade v2.0.

No prompt de comando, verifique se você está na pasta raiz do projeto. Em seguida, execute o seguinte comando:

npm run configure-sso

O comando iniciará um navegador e solicitará que você entre no Microsoft Entra ID. Verifique se você entra como um usuário que tem permissões para registrar um aplicativo Microsoft Entra, como um usuário atribuído à função de Administrador Global.

Após a autenticação, o script executará as seguintes tarefas:

  1. Registrar o aplicativo Microsoft Entra
  2. Definir as configurações de audiência e permissões do aplicativo
  3. Criar um novo segredo do cliente e salvá-lo no repositório secreto de estações de trabalho do desenvolvedor
  4. Atualizar o projeto com a ID do cliente do aplicativo Microsoft Entra

Captura de tela da saída da execução do script configure-sso.

Aviso

O comando configure-sso falhará se o locatário Microsoft Entra estiver configurado para autenticação multifator (MFA)/autenticação de dois fatores. Nesse caso, você precisará criar manualmente o registro do aplicativo Microsoft Entra conforme descrito no artigo Criar um suplemento do Office Node.js que usa logon único: registre o suplemento com Azure AD artigo do ponto de extremidade v2.0.

Criar e testar o aplicativo

Execute o seguinte comando em um prompt de comando para transpilar e iniciar o processo de depuração:

npm start

Testar o suplemento no cliente Web do Outlook

Abra um navegador e navegue até o Outlook (https://outlook.office.com). Entre usando uma Conta Corporativa ou de Estudante.

Crie uma nova mensagem selecionando o botão Nova mensagem.

Na nova seção de mensagem, localize o botão ... na parte inferior da nova mensagem, no mesmo rodapé com os botões Enviar e Descartar.

Selecione o item de menu Obter suplementos.

Captura de tela do botão Obter Suplementos.

Na caixa Suplementos do Outlook, selecione Meus suplementos no menu à esquerda.

Na tela Meus suplementos, selecione o botão Adicionar um suplemento personalizado>Adicionar do arquivo....

Captura de tela mostrando como fazer sideload de um suplemento personalizado.

Selecione o arquivo manifest.xml na raiz da pasta do seu projeto e selecione Carregar.

Quando solicitado, selecione o botão Instalar na caixa de diálogo Aviso.

Feche a caixa de diálogo e selecione o botão ...na parte inferior do email. Observe que seu suplemento personalizado agora é exibido:

Captura de tela do suplemento carregado no Outlook.

Selecione o suplemento para abrir o painel de tarefas. Quando o painel de tarefas for exibido, selecione o botão Obter informações de perfil do usuário.

Como você já está conectado, após alguns instantes, você verá as informações básicas do perfil do usuário aparecerem no email sem precisar entrar.

Captura de tela do painel de tarefas do suplemento em um novo email do Outlook.

Atualize o aplicativo para mostrar as próximas reuniões

Agora, vamos atualizar o aplicativo do painel de tarefas para exibir para o usuário conectado uma lista de reuniões futuras. Essas informações serão coletadas com o Microsoft Graph.

Atualizar o painel de tarefas

Localize e abra ./src/taskpane/taskpane.html.

Substitua o elemento <body> pelo HTML a seguir. Isso atualizará a renderização do painel de tarefas:

<body class="ms-font-m ms-welcome ms-Fabric">
  <header class="ms-welcome__header ms-bgColor-neutralLighter">
    <img width="90" height="90" src="../../assets/logo-filled.png" alt="Contoso" title="Contoso" />
    <h1 class="ms-font-su">My upcoming meetings... </h1>
  </header>
  <main class="ms-firstrun-instructionstep">
    <ul class="ms-List ms-welcome__features">
      <li class="ms-ListItem">
        <i class="ms-Icon ms-Icon--Ribbon ms-font-xl"></i>
        <span class="ms-font-m">Share your day with others...</span>
      </li>
    </ul>
    <section class="ms-firstrun-instructionstep__header">
      <h2 class="ms-font-m">This add-in adds a list of your upcoming meetings to the current email.</h2>
      <div class="ms-firstrun-instructionstep__header--image"></div>
    </section>
    <p align="center">
      <button id="getGraphDataButton" class="popupButton ms-Button ms-Button--primary"><span class="ms-Button-label">Add
          upcoming schedule to email</span></button>
    </p>
    </div>
  </main>
</body>

Atualizar o código do painel de tarefas

Agora, atualize o código que receberá os próximos eventos de calendário do usuário.

Localize e abra o arquivo ./src/helpers/ssoauthhelper.js.

Encontre a seguinte linha no método getGraphData():

const response = await sso.makeGraphApiCall(exchangeResponse.access_token);

Exclua essa linha e a substitua pelo código a seguir. Esse código usa um método diferente no auxiliar de logon único para enviar uma solicitação específica para o Microsoft Graph.

Esta consulta obterá todas as reuniões na agenda do usuário atual a partir do horário atual pelas próximas 24 horas:

const startDate = new Date();
let endDate = new Date(startDate);
endDate.setDate(startDate.getDate() + 1);

const endpoint = "/me/calendarview";
const urlParams = `?startdatetime=${ startDate.toISOString() }&enddatetime=${ endDate.toISOString() }&$select=subject,start,end`;

const response = await sso.getGraphData(exchangeResponse.access_token, endpoint, urlParams);

Em seguida, localize e abra o arquivo ./src/helpers/documentHelper.js.

Localize o método writeDataToOutlook(). Você substituirá o conteúdo desse método para criar uma cadeia de caracteres HTML das reuniões futuras retornadas da solicitação de Microsoft Graph e adicionará a lista ao email atual.

Substitua o conteúdo do método writeDataToOutlook() pelo seguinte código:

let emailMessage = "";

result.value.forEach(function(meeting){
  let startDateTime = new Date(meeting.start.dateTime + "Z");
  let endDateTime = new Date(meeting.end.dateTime + "Z");
  emailMessage += `<li><strong><em>${startDateTime.toLocaleTimeString()}-${endDateTime.toLocaleTimeString()}</em></strong><br />${meeting.subject}</li>`;
});

// wrap meeting
emailMessage = `Here's what my upcoming calendar looks like for the rest of the day: <ul>${emailMessage}</ul>`;

Office.context.mailbox.item.body.setSelectedDataAsync(emailMessage, { coercionType: Office.CoercionType.Html });

Criar um novo aplicativo Microsoft Entra para o suplemento

Os exercícios anteriores neste módulo usaram o script utilitário configure-sso incluído em todos os projetos criados com o Gerador Yeoman para Microsoft Office. Para este exercício, você aprenderá a registrar manualmente um aplicativo Microsoft Entra e configurar seu ambiente de desenvolvedor para usar o aplicativo criado manualmente.

Abra um navegador e navegue até o centro de administração Microsoft Entra (https://aad.portal.azure.com). Entre usando uma Conta Corporativa ou de Estudante que tenha direitos de administrador global para os locatários.

Selecione Microsoft Entra ID na navegação mais à esquerda.

Registro do aplicativo

Selecione Gerenciar>Registros de aplicativo na navegação mais à esquerda.

Captura de tela dos registros de aplicativo no portal do centro de administração Microsoft Entra.

Na página Registros de aplicativo, selecione Novo registro e defina os seguintes valores na tela Registrar um aplicativo. Quando terminar, selecione o botão Registrar.

  • Nome: MyOutlookSsoAddin2
  • Tipos de conta com suporte: Contas em qualquer diretório organizacional (Qualquer diretório Microsoft Entra – Multilocatário)
  • URI de redirecionamento (opção): valor padrão em branco

Autenticação de aplicativo

A próxima etapa é configurar os detalhes de registro do aplicativo.

Em seguida, na navegação mais à esquerda, selecione Gerenciar>Autenticação.

Na tela Autenticação, selecione Adicionar uma plataforma. Em seguida, selecione Web na lista de opções:

Captura de tela mostrando como selecionar a plataforma web.

Para os URIs de redirecionamento, insira https://localhost:3000/taskpane.html.

Para concessão implícita e fluxos híbridos, selecione as opções a seguir e selecione Configurar:

  • Tokens de acesso (usados para fluxos implícitos)
  • Tokens de ID (usados para fluxos implícitos e híbridos)

Depois que a tela for recarregada, selecione Adicionar URI na plataforma Web e insira https://localhost:3000/fallbackauthdialog.html.

Selecione Salvar na parte superior da tela para salvar as alterações.

Captura de tela das configurações de autenticação do aplicativo.

Certificados e segredos do aplicativo

Agora você precisa criar um segredo do cliente para o aplicativo

Selecione Segredos de certificados & no painel de navegação mais à esquerda.

Selecionar o botão Novo segredo do cliente:

Captura de tela da página Certificados e segredos no centro de administração Microsoft Entra.

Quando solicitado, dê uma descrição ao segredo e selecionar uma das opções de duração de expiração fornecidas e selecionar Adicionar. O que você inserir e selecionar não importa para o exercício.

Captura de tela mostrando como adicionar um segredo do cliente.

A páginaCertificados & Segredos exibirá o novo segredo.

Importante

É importante copiar esse valor, pois ele é mostrado apenas uma vez. Se você sair da página e voltar, ela apenas mostrará como um valor máscara.

Captura de tela mostrando o novo segredo.

Depois de copiar o segredo do cliente, vamos copiar a ID do cliente também. Na navegação mais à esquerda, selecione Gerenciar>Visão Geral.

Captura de tela mostrando a ID do cliente.

Permissões de API

Em seguida, você precisa conceder as permissões de aplicativo para o Microsoft Graph.

Na navegação mais à esquerda, selecione Gerenciar>permissões da API.

É uma boa prática solicitar apenas as permissões de que seu aplicativo precisa. Portanto, vamos remover a permissão inicial User.Read selecionando-a e, em seguida, selecione Remover permissão, seguido por Sim, remover para confirmar.

Em seguida, vamos adicionar as permissões mínimas necessárias para que os usuários se conectem usando o logon único.

Adicione uma nova permissão selecionando Adicionar permissão.

Na tela Selecionar uma API, selecione Microsoft Graphe, em seguida, selecione Permissões delegadas. Selecione as seguintes permissões nas seções a seguir ou use a caixa de pesquisa para encontrar essas permissões:

  • Permissões do OpenID
    • openid
    • perfil
  • Calendários
    • Calendars.Read

Depois de selecionar essas permissões, selecione o botão Adicionar permissões.

Captura de tela das permissões adicionadas.

Em seguida, selecione Conceder consentimento do administrador para a Contoso seguido de aceitar o prompt de confirmação selecionando Sim.

Expor uma API: URI da ID do Aplicativo

Por fim, selecione Gerenciar>Expor uma API na navegação mais à esquerda. Há várias coisas a fazer nesta página:

Primeiro, selecione Definir ao lado do URI ID do Aplicativo. Essa é a ID exclusiva do nosso aplicativo. Adicione localhost:3000/ logo antes do protocolo e da ID do aplicativo para que ele seja semelhante ao seguinte e selecione Salvar:

api://localhost:3000/f7b53c32-c205-40d8-84dc-0c15b662054c

Observação

O GUID é a ID exclusiva para cada aplicativo. Sua ID não corresponderá à mostrada neste exercício.

Expor uma API: escopos definidos pela API

A próxima seção contém os escopos definidos pela API. Eles podem ser escopos personalizados que permitem restringir o acesso a dados e funcionalidades protegidas pela API.

Selecione Adicionar um escopo e use os seguintes valores para concluir o formulário:

  • Nome do escopo: access_as_user
  • Quem pode consentir? Administradores e usuários
  • Nome de exibição do consentimento do administrador: O Office pode atuar como se fosse o usuário
  • Descrição de autorização de administrador: Permite ao Office chamar os APIs de suplemento da web com os mesmos direitos que o usuário atual.
  • Nome de exibição de consentimento do usuário: O Office pode agir como se fosse você
  • Descrição de autorização de usuário: Permite ao Office chamar os APIs de suplemento da web com os mesmos direitos que você possui.
  • Estado: Habilitado

Expor uma API: aplicativos cliente autorizados

A última seção indica que a API confiará automaticamente em aplicativos específicos e não solicitará o consentimento do usuário quando o aplicativo chamar essa API.

Isso autoriza os aplicativos web e de área de trabalho do Office a chamar a API do suplemento.

Selecione Adicionar um aplicativo cliente para adicionar os aplicativos a seguir. Os aplicativos são adicionados como GUIDs. Para cada um deles, certifique-se de selecionar os Escopos autorizados listados para conceder ao aplicativo acesso ao escopo definido anteriormente:

  • d3590ed6-52b3-4102-aeff-aad2292ab01c (Microsoft Office)
  • ea5a67f6-b6f3-4338-b240-c655ddc3cc8e (Microsoft Office)
  • 57fb890c-0dab-4253-a5e0-7188c88b2bb4 (Office na Web)
  • 08e18876-6177-487e-b8b5-cf950c1e598c (Office na Web)
  • bc59ab01-8403-45c6-8796-ac3ef710b3e3 (Outlook na Web)
  • 93d53678-613d-4013-afc1-62e9e444a0a5 (Office na Web)

Se você selecionar um desses aplicativos, cada um deles terá o escopo definido anteriormente como um escopo autorizado.

Captura de tela mostrando a ID e os clientes autorizados que podem acessar a API do suplemento.

Atualizar o projeto e a estação de trabalho do desenvolvedor

Com o aplicativo Microsoft Entra criado, a última etapa é atualizar seu projeto e estação de trabalho para usar o novo aplicativo.

No seu projeto, localize e abra o arquivo .ENV.

Atualize o CLIENT_ID para usar a ID do cliente que você copiou do processo de registro do aplicativo.

Localize e abra o arquivo ./manifest.xml. No final do arquivo, localize o elemento <WebApplicationInfo>. Dentro desse elemento, atualize os elementos <ID> e <Resource> para usar a nova ID do cliente.

Localize e abra o arquivo ./src/helpers/fallbackauthdialog.js. Localize a linha que começa com const msalConfig. Este é o objeto de configuração MSAL.js. Atualize a propriedade clientId do objeto para ser a nova ID do cliente.

Em seguida, você precisa salvar o segredo do cliente para o aplicativo no repositório de credenciais na estação de trabalho do desenvolvedor. O trabalho que você executará depende da sua plataforma.

Windows

Execute o seguinte PowerShell, depois de atualizar os três primeiros valores:

  • $ssoAppName: o nome do seu projeto, como MyOutlookSsoAddin
  • $user: seu nome de usuário de login do Windows, como MyDomain\MyUserName
  • $secret: o segredo do cliente copiado ao registrar o aplicativo Microsoft Entra
$ssoAppName = "MyOutlookSsoAddin"
$user = "MyDomain\MyUserName"
$secret = "....."
[void][Windows.Security.Credentials.PasswordVault, Windows.Security.Credentials, ContentType = WindowsRuntime]
$creds = New-Object Windows.Security.Credentials.PasswordCredential
$creds.Resource = $ssoAppName
$creds.UserName = $user
$creds.Password = $secret
$vault = New-Object Windows.Security.Credentials.PasswordVault
$vault.Add($creds)

macOS

Execute o seguinte no console, depois de atualizar os três primeiros valores:

  • SSOAPPNAME: o nome do seu projeto, como MyOutlookSsoAddin
  • USER: seu nome de usuário de entrada do macOS, como myusername
  • SECRET: o segredo do cliente copiado ao registrar o aplicativo Microsoft Entra
SSOAPPNAME="MyOutlookSsoAddin"
USER="myusername"
SECRET="...."
sudo security add-generic-password -a $USER -s $SSOAPPNAME -w $SECRET -U

Compilar e testar novamente o aplicativo

Execute o seguinte comando em um prompt de comando para transpilar e iniciar o processo de depuração:

npm start

Teste novamente o suplemento no cliente Web do Outlook

Abra um navegador e navegue até o Outlook (https://outlook.office.com). Entre usando uma Conta Corporativa ou de Estudante.

Repita o processo de teste do suplemento que você fez no início deste exercício. No entanto, antes de ativar o suplemento, você precisa removê-lo porque o suplemento atualmente instalado ainda está usando o arquivo antigomanifest.xml com o registro antigo do aplicativo Microsoft Entra.

Para remover o suplemento, siga as mesmas etapas para instalar um novo suplemento, mas antes de carregar o arquivo personalizado manifest.xml, remova o suplemento instalado anteriormente:

Captura de tela mostrando como remover um suplemento existente.

Depois de instalar o arquivo manifest.xml do suplemento atualizado, conclua o processo de teste para testar a nova lógica do seu suplemento.

Captura de tela dos resultados do suplemento atualizado.

Teste o seu conhecimento

1.

O aplicativo Azure AD registrado para um Suplemento do Office confia automaticamente no dos clientes do Office para chamá-lo?

2.

Quais dos seguintes tipos de aplicativos têm suporte para Suplementos do Office?

3.

Por que é considerado uma boa prática pré-autorizar todos os clientes do Office no aplicativo do Azure AD?