Autorizar o Microsoft Graph com SSO
Os usuários entrarão no Office usando sua conta pessoal da Microsoft ou sua conta de trabalho ou Microsoft 365 Education. A melhor maneira de um Suplemento do Office receber acesso autorizado ao Microsoft Graph é usar as credenciais de logon do Office do usuário. Isso permite a eles acessar seus dados do Microsoft Graph sem precisar entrar novamente.
Arquitetura de suplemento para SSO e Microsoft Graph
Além de hospedar as páginas e o JavaScript do aplicativo web, o suplemento também deve hospedar, ao mesmo tempo o nome de domínio totalmente qualificado, uma ou mais APIs web que obterá um token de acesso ao Microsoft Graph e fará solicitações a ele.
O manifesto de suplemento contém um <elemento WebApplicationInfo> que fornece informações importantes de registro de aplicativo do Azure para o Office, incluindo as permissões para o Microsoft Graph necessárias para o suplemento.
Como ele funciona em tempo de execução
O diagrama a seguir mostra as etapas envolvidas para entrar e acessar o Microsoft Graph. Todo o processo usa tokens de acesso OAuth 2.0 e JWT.
O código do lado do cliente do suplemento chama o getAccessToken Office.js API. Isso informa ao host do Office para obter um token de acesso para o suplemento.
Se o usuário não estiver conectado, o host do Office em conjunto com o plataforma de identidade da Microsoft fornecerá interface do usuário para que o usuário entre e consenta.
O host do Office solicita um token de acesso do plataforma de identidade da Microsoft.
O plataforma de identidade da Microsoft retorna o token de acesso A para o host do Office. Token de acesso Um só fornece acesso às APIs do próprio servidor do suplemento. Ele não fornece acesso ao Microsoft Graph.
O host do Office retorna o token de acesso A ao código do lado do cliente do suplemento. Agora, o código do lado do cliente pode fazer chamadas autenticadas para as APIs do lado do servidor.
O código do lado do cliente faz uma solicitação HTTP para uma API Web no lado do servidor que requer autenticação. Ele inclui o token de acesso A como prova de autorização. O código do lado do servidor valida o token de acesso A.
O código do lado do servidor usa o OBO (fluxo on-behalf-of) do OAuth 2.0 para solicitar um novo token de acesso com permissões para o Microsoft Graph.
O plataforma de identidade da Microsoft retorna o novo token de acesso B com permissões para o Microsoft Graph (e um token de atualização, se o suplemento solicitar offline_access permissão). Opcionalmente, o servidor pode armazenar em cache o token B de acesso.
O código do lado do servidor faz uma solicitação a um microsoft API do Graph e inclui o token de acesso B com permissões para o Microsoft Graph.
O Microsoft Graph retorna dados ao código do lado do servidor.
O código do lado do servidor retorna os dados para o código do lado do cliente.
Em solicitações subsequentes, o código do cliente sempre passará o token de acesso A ao fazer chamadas autenticadas para o código do lado do servidor. O código do lado do servidor pode armazenar em cache o token B para que ele não precise solicitá-lo novamente em chamadas futuras de API.
Desenvolver um suplemento SSO que acessa o Microsoft Graph
Você desenvolve um suplemento que acessa o Microsoft Graph da mesma forma que qualquer outro aplicativo que usa o SSO. Para obter uma descrição completa, consulte Habilitar logon único para suplementos do Office. A diferença é que é obrigatório que o suplemento tenha uma API Web do lado do servidor.
Dependendo do seu idioma e da estrutura, podem estar disponíveis bibliotecas que simplificarão o código do lado do servidor que você precisa escrever. O código deve fazer o seguinte:
- Valide o token de acesso A sempre que ele é passado do código do lado do cliente. Para saber mais, confira Validar o token de acesso.
- Inicie o OBO (fluxo em nome do OBO) do OAuth 2.0 com uma chamada para o plataforma de identidade da Microsoft que inclui o token de acesso, alguns metadados sobre o usuário e as credenciais do suplemento (sua ID e segredo). Para obter mais informações sobre o fluxo OBO, consulte fluxo plataforma de identidade da Microsoft e OAuth 2.0 Em nome do fluxo.
- Opcionalmente, depois que o fluxo for concluído, armazene o token B de acesso retornado com permissões para o Microsoft Graph. Faça isso se o suplemento fizer mais de uma chamada para o Microsoft Graph. Para obter mais informações, confira Adquirir e cache tokens usando a MSAL (Biblioteca de Autenticação da Microsoft)
- Crie um ou mais métodos de API Web que obtenham dados do Microsoft Graph passando o token B de acesso (possivelmente armazenado em cache) para o Microsoft Graph.
Para obter exemplos detalhados passo a passo de cenários, confira:
- Criar um Suplemento do Office com Node.js que usa logon único
- Criar um Suplemento do Office com ASP.NET que usa logon único
- Cenário: implementar o logon único no serviço em um suplemento do Outlook
Distribuição de suplementos habilitados para SSO no Microsoft AppSource
Quando um administrador do Microsoft 365 adquire um suplemento do AppSource, o administrador pode redistribuí-lo por meio de Aplicativos Integrados e conceder consentimento de administrador ao suplemento para acessar escopos do Microsoft Graph. No entanto, também é possível que o usuário final adquira o suplemento diretamente do AppSource, nesse caso, o usuário deve conceder consentimento ao suplemento. Isso pode criar um problema de desempenho potencial para o qual fornecemos uma solução.
Se o código passar a opção allowConsentPrompt
na chamada de getAccessToken
, como OfficeRuntime.auth.getAccessToken( { allowConsentPrompt: true } );
, o Office poderá solicitar consentimento ao usuário se o plataforma de identidade da Microsoft relatar ao Office que o consentimento ainda não foi concedido ao suplemento. No entanto, por motivos de segurança, o Office só pode solicitar que o usuário consenta com o escopo do Microsoft Graph profile
. O Office não pode solicitar consentimento para outros escopos do Microsoft Graph, nem mesmo User.Read
. Isso significa que, se o usuário conceder consentimento no prompt, o Office retornará um token de acesso. Mas a tentativa de trocar o token de acesso por um novo token de acesso com escopos adicionais do Microsoft Graph falha com AADSTS65001 de erro, o que significa que o consentimento (para escopos do Microsoft Graph) não foi concedido.
Observação
A solicitação de consentimento com { allowConsentPrompt: true }
ainda pode falhar mesmo para o profile
escopo se o administrador tiver desativado o consentimento do usuário final. Para obter mais informações, consulte Configurar como os usuários finais consentem com aplicativos usando o Azure Active Directory.
Seu código pode e deve lidar com esse erro recuando para um sistema alternativo de autenticação, o que solicita o consentimento do usuário para os escopos do Microsoft Graph. Para obter exemplos de código, consulte Criar uma Node.js Suplemento do Office que usa logon único e Criar um suplemento do Office ASP.NET que usa logon único e os exemplos aos quais eles vinculam. Todo o processo requer várias viagens de ida e volta para o plataforma de identidade da Microsoft. Para evitar essa penalidade de desempenho, inclua a opção forMSGraphAccess
na chamada de getAccessToken
; por exemplo, OfficeRuntime.auth.getAccessToken( { forMSGraphAccess: true } )
. Isso sinaliza ao Office que seu suplemento precisa de escopos do Microsoft Graph. O Office pedirá ao plataforma de identidade da Microsoft para verificar se o consentimento para escopos do Microsoft Graph já foi concedido ao suplemento. Se tiver, o token de acesso será retornado. Se não tiver, a chamada de getAccessToken
retorna o erro 13012. Seu código pode lidar com esse erro recuando para um sistema alternativo de autenticação imediatamente, sem fazer uma tentativa condenada de trocar tokens com o plataforma de identidade da Microsoft.
Como prática recomendada, sempre passe forMSGraphAccess
para getAccessToken
quando seu suplemento será distribuído no AppSource e precisa de escopos do Microsoft Graph.
Detalhes sobre o SSO com um suplemento do Outlook
Se você desenvolver um suplemento do Outlook que usa o SSO e o carregar de lado para testes, o Office sempre retornará o erro 13012 quando forMSGraphAccess
for passado para getAccessToken
mesmo se o consentimento do administrador tiver sido concedido. Por esse motivo, você deve comentar a opção forMSGraphAccess
ao desenvolver um suplemento do Outlook. Certifique-se de descompactar a opção ao implantar para produção. O falso 13012 só acontece quando você está carregando sideload no Outlook.
Para suplementos do Outlook, habilite a Autenticação Moderna para a locação do Microsoft 365. Para obter informações sobre como fazer isso, consulte Habilitar ou desabilitar a autenticação moderna para o Outlook em Exchange Online.
Suporte a cookie de terceiros do Google Chrome
O Google Chrome está eliminando cookies de terceiros em 2024 e introduzindo um recurso chamado Prevenção de Rastreamento. Se a Prevenção de Rastreamento estiver habilitada no navegador Chrome, seu suplemento não poderá usar cookies de terceiros. Seu suplemento pode encontrar problemas ao autenticar o usuário, como várias solicitações de logon ou erros.
Para obter experiências de autenticação aprimoradas, consulte Usar o estado do dispositivo para obter uma experiência de SSO aprimorada em navegadores com cookies de terceiros bloqueados.
Para obter mais informações sobre a distribuição do Google Chrome, confira os seguintes recursos:
- A próxima etapa para eliminar cookies de terceiros no Chrome.
- A linha do tempo da área restrita de privacidade para a Web
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de