Cenários de MSAL.NET

Introdução

As bibliotecas de autenticação .NET dão suporte a cenários que envolvem a proteção de uma API Web e a aquisição de tokens para uma API Web protegida. MSAL.NET é usado apenas para este último.

Como desenvolvedor, você pode adquirir um token de vários tipos de aplicativo, incluindo aplicativos Web, aplicativos móveis, aplicativos da área de trabalho, APIs Web e aplicativos em execução em dispositivos que não têm um navegador (ou iOT). Esses tipos de aplicativos são separados em duas categorias:

MSAL.NET dá suporte à aquisição de tokens no nome de um ícone de usuário ou (e somente para aplicativos cliente confidenciais), no nome do próprio aplicativo (para nenhum usuário). Nesse caso, o aplicativo cliente confidencial compartilha um segredo com Microsoft Entra ID ícone de Microsoft Entra ID

MSAL.NET dá suporte a várias plataformas (.NET Framework, .NET e .NET MAUI). .NET aplicativos também podem ser executados em sistemas operacionais diferentes (Windows, Linux e macOS). Os cenários podem ser diferentes dependendo das plataformas.

Os cenários

A imagem a seguir resume os cenários com suporte e mostra em qual plataforma e para qual protocolo Microsoft Entra isso corresponde:

Imagem mostrando cenários e plataformas com suporte

Aplicativo Web que entra em usuários e chama uma API Web em nome do usuário

Para proteger um aplicativo Web (entrar no usuário), você usará ASP.NET ou ASP.NET Core com o middleware ASP.NET OpenID Connect. Isso envolve validar o token que é feito pelas extensões IdentityModel para .NET biblioteca, não MSAL.NET.

Para chamar a API Web no nome do usuário, você usará MSAL.NETConfidentialClientApplication, aproveitando o fluxo de código de autorização e, em seguida, armazenando o token adquirido no cache de token e adquirindo um token silenciosamente do cache quando necessário. A MSAL atualiza o token, se necessário.

Imagem mostrando o fluxo em um aplicativo Web que inscreve usuários e chama uma API Web em nome do usuário

Aplicativo móvel que chama uma API Web em nome do usuário que está conectado interativamente

Para chamar uma API Web de um aplicativo móvel, use os métodos interativos de aquisição de token do PublicClientApplication da MSAL.NET. Esses métodos interativos permitem controlar a experiência de interface do usuário de entrada, bem como o local da caixa de diálogo interativa em algumas plataformas.

Para habilitar essa interação, MSAL.NET aproveita um navegador da Web. Há especificidades dependendo da plataforma móvel. No iOS e no Android, você pode escolher se deseja aproveitar o navegador do sistema (o padrão) ou um navegador da Web inserido. Você pode habilitar o compartilhamento de cache de token no iOS.

Imagem mostrando fluxos em um aplicativo móvel que chama uma API Web em nome do usuário

Protegendo o aplicativo em si com o Intune

Seu aplicativo móvel (escrito em Xamarin.iOS ou Xamarin. O Android) pode ter políticas de proteção de aplicativo aplicadas a ele, para que ele possa ser gerenciado pelo InTune e reconhecido pelo Intune como um aplicativo gerenciado. O SDK do InTune é separado da MSAL e conversa para Microsoft Entra ID por conta própria.

Aplicativo daemon de área de trabalho ou serviço que chama uma API Web como ela mesma (em seu próprio nome)

Você pode escrever um aplicativo daemon que adquire um token usando sua própria identidade na parte superior usando os métodos de aquisição de credenciais de cliente do ConfidentialClientApplication da MSAL.NET. Eles supõem que o aplicativo tenha registrado anteriormente um segredo (senha ou certificado do aplicativo) com Microsoft Entra ID, que ele compartilha com essa chamada.

Imagem mostrando um aplicativo daemon que chama uma API Web usando sua própria identidade

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

Os aplicativos da área de trabalho podem usar a mesma autenticação interativa que os aplicativos móveis.

Imagem mostrando o fluxo em um aplicativo da área de trabalho que chama uma API Web em nome de um usuário conectado

Para Windows aplicativos hospedados, também é possível que aplicativos em execução em computadores ingressados em um domínio Windows ou Microsoft Entra unidos para adquirir um token silenciosamente usando a Autenticação integrada de Windows.

Se o aplicativo da área de trabalho for um aplicativo .NET Core em execução no Linux ou mac, você não poderá usar o fluxo de autenticação interativa (já que .NET Core não fornece um navegador da Web) nem a Autenticação integrada Windows. A melhor opção nesse caso é usar o fluxo de código do dispositivo, conforme explicado no Aplicativo sem um navegador ou aplicativo iOT chamando uma API no nome do usuário.

Embora não seja recomendado, você pode usar o fluxo nome de usuário-senha em aplicativos cliente públicos; Ele ainda é necessário em alguns cenários (como DevOps), mas cuidado que usá-lo impõe restrições ao seu aplicativo. Por exemplo, você não pode conectar usuários que precisam executar a Autenticação Multifator (acesso condicional) ou aproveitar os benefícios do SSO (logon único). O fluxo nome de usuário-senha vai contra os princípios da autenticação moderna e é fornecido apenas por motivos herdados.

Em aplicativos da área de trabalho, se você quiser que o cache de token seja persistente, você deverá personalizar a serialização do cache de token.

Aplicativo sem navegador ou aplicativo iOT chamando uma API no nome do usuário

Os aplicativos em execução em um dispositivo sem um navegador ainda poderão chamar uma API em nome de um usuário, depois de fazer com que o usuário entre em outro dispositivo que tenha um navegador da Web. Para isso, você precisará usar o fluxo de Código do Dispositivo

Imagem mostrando o fluxo em um aplicativo sem navegador que chama uma API em nome do usuário

API Web chamando outra API Web downstream no nome do usuário para quem ele foi chamado

Se você quiser que seu ASP.NET ou ASP.NET Core API Web protegida chame outra API Web em nome do usuário representado pelo token de acesso foi usado para chamá-lo de API, você precisará:

  • Valide o token. Para isso, você usará o middleware JWT ASP.NET sob o capô. Isso também envolve validar o token que é feito pelas extensões IdentityModel para .NET biblioteca, não MSAL.NET
  • Em seguida, você precisará adquirir um token para a API Web downstream usando o método ConfidentialClientApplication Adquirindo um token em nome de um usuário em chamadas de serviço a serviço.
  • As APIs Web que chamam outra API Web também precisarão fornecer uma serialização de cache personalizada.

Imagem mostrando o fluxo em uma API Web chamando uma API Web downstream

API Web chamando outra API em seu próprio nome

Assim como em aplicativos daemon de área de trabalho ou serviço, uma API Web daemon (ou um aplicativo Web daemon) pode usar os métodos de aquisição de credenciais de cliente do ConfidentialClientApplication da MSAL.NET.

Recursos do Transverse

Em todos os cenários, talvez você queira: