Cenários MSAL.NET

Introduction

As bibliotecas de autenticação .NET suportam cenários que envolvem a proteção de uma API Web e a aquisição de tokens para uma API Web protegida. O MSAL.NET é usado apenas para estes últimos.

Como programador, pode adquirir um token de vários tipos de aplicações, incluindo aplicações web, aplicações móveis, aplicações de ambiente de trabalho, APIs web e aplicações a correr em dispositivos que não têm navegador (ou iOT). Estes tipos de aplicações dividem-se em duas categorias:

  • Aplicações clientes públicas (desktop e móveis) utilizam a PublicClientApplication classe
  • Aplicações cliente confidenciais (aplicações web, APIs web e aplicações daemon - desktop ou web). Este tipo de aplicações utiliza o ConfidentialClientApplication.

O MSAL.NET suporta a aquisição de tokens quer em nome de um ícone de utilizador, quer (e apenas para aplicações clientes confidenciais), em nome da própria aplicação (para nenhum utilizador). Nesse caso, a aplicação cliente confidencial partilha um segredo com o ícone do Microsoft Entra ID do Microsoft Entra ID

O MSAL.NET suporta várias plataformas (.NET Framework, .NET e .NET MAUI). As aplicações .NET também podem correr em diferentes sistemas operativos (Windows, Linux e macOS). Os cenários podem variar consoante as plataformas.

Os Cenários

A imagem abaixo resume os cenários suportados e mostra em que plataforma, e a que protocolo Microsoft Entra isto corresponde:

Imagem mostrando cenários e plataformas suportados

Aplicação web que faz login com os utilizadores e chama uma API web em nome do utilizador

Para proteger uma aplicação web (iniciar sessão do utilizador) vais usar ASP.NET ou ASP.NET Core com o middleware ASP.NET OpenID Connect. Isto envolve validar o token, o que é feito pelas extensões IdentityModel para a biblioteca .NET, e não pelo MSAL.NET.

Para chamar a API web em nome do utilizador, usará o MSAL.NETConfidentialClientApplication, aproveitando o fluxo de código de autorização, armazenando o token adquirido na cache do token e adquirindo um token silenciosamente a partir da cache quando necessário. O MSAL atualiza o token, se necessário.

Imagem que mostra o fluxo numa aplicação web que faz login com os utilizadores e chama uma API web em nome do utilizador

Aplicação móvel que chama uma API web em nome do utilizador que iniciou sessão de forma interativa

Para chamar uma API web a partir de uma aplicação móvel, utiliza-se os métodos interativos de aquisição de tokens do PublicClientApplication da MSAL.NET. Estes métodos interativos permitem-lhe controlar a experiência da interface de iniciação de sessão, bem como a localização do diálogo interativo em algumas plataformas.

Para permitir esta interação, o MSAL.NET utiliza um navegador web. Existem especificidades dependendo da plataforma móvel. No iOS e Android, pode escolher se quer aproveitar o navegador do sistema (o predefinido) ou um navegador web embutido. Podes ativar a partilha de cache de tokens no iOS.

Imagem a mostrar fluxos numa aplicação móvel que chama uma API web em nome do utilizador

Proteger a própria aplicação com o Intune

A sua aplicação móvel (escrita em Xamarin.iOS ou Xamarin. Android) pode ter políticas de proteção de aplicações aplicadas, para que possa ser gerida pelo InTune e reconhecida pelo Intune como uma aplicação gerida. O SDK do InTune é separado do MSAL e comunica com o Microsoft Entra ID de forma autónoma.

Aplicação de desktop ou daemon de serviço que chama uma API web como ela própria (no seu próprio nome)

Pode escrever uma aplicação daemon que adquira um token usando a sua própria identidade por cima, utilizando os métodos de aquisição de credenciais do cliente do ConfidentialClientApplication da MSAL.NET. Isto supõe que a aplicação tenha anteriormente registado um segredo (palavra-passe ou certificado da aplicação) junto do Microsoft Entra ID, que depois partilha com esta chamada.

Imagem mostrando uma aplicação daemon que chama uma API web usando a sua própria identidade

Aplicativo de área de trabalho que chama uma API da Web em nome de um usuário conectado

As aplicações de ambiente de trabalho podem usar a mesma autenticação interativa que as aplicações móveis.

Imagem a mostrar o fluxo numa aplicação de ambiente de trabalho que chama uma API web em nome de um utilizador iniciado sessão

Para aplicações alojadas no Windows, também é possível que aplicações a correr em computadores ligados a um domínio Windows ou ao Microsoft Entra adquiram um token silenciosamente através da Autenticação Windows Integrada.

Se a sua aplicação de ambiente de trabalho for uma aplicação .NET Core a correr em Linux ou Mac, não pode usar o fluxo interativo de autenticação (uma vez que o .NET Core não fornece navegador web) nem a Autenticação Windows Integrada. A melhor opção nesse caso é usar o fluxo de código do dispositivo, conforme explicado em Aplicação, sem navegador, ou aplicação iOT a chamar uma API em nome do utilizador.

Embora não seja recomendado, pode usar o fluxo Nome de utilizador-palavra-passe em aplicações clientes públicas; Ainda é necessário em alguns cenários (como DevOps), mas atenção que usá-lo impõe restrições à sua aplicação. Por exemplo, não pode iniciar sessão com utilizadores que precisam de realizar Autenticação Multifator (acesso condicional) ou tirar partido dos benefícios do login único (SSO). O fluxo nome de utilizador e palavra-passe vai contra os princípios da autenticação moderna e é fornecido apenas por razões legadas.

Em aplicações de ambiente de trabalho, se quiser que a cache de tokens seja persistente, deve personalizar a serialização da cache de tokens.

Aplicação sem navegador, ou aplicação iOT que chama uma API em nome do utilizador

Aplicações a correr num dispositivo sem navegador continuarão a conseguir chamar uma API em nome de um utilizador, depois de o utilizador iniciar sessão noutro dispositivo que tenha um navegador web. Para isso, terá de usar o fluxo de Código do Dispositivo

Imagem que mostra o fluxo numa aplicação sem navegador que chama uma API em nome do utilizador

Web API chamada outra API Web a jusante em nome do utilizador para quem foi chamada

Se quiser que a sua API web protegida por ASP.NET ou ASP.NET Core chame outra API web em nome do utilizador representado pelo token de acesso usado para a ligar, terá de:

Imagem que mostra o fluxo numa API web a chamar uma API web a jusante

Web API a chamar outra API no seu próprio nome

Tal como em aplicações de desktop ou de demónios de serviço, uma API web de demónio (ou uma aplicação web de demónio) pode usar os métodos de aquisição de credenciais de cliente do ConfidentialClientApplication da MSAL.NET.

Características transversais

Em todos os cenários, pode querer: