Tutorial: Chamar a API do Microsoft Graph de um aplicativo da UWP (Plataforma Universal do Windows)

Neste tutorial, você criará um aplicativo UWP (Plataforma Universal do Windows) nativo que conecta usuários e obtém um token de acesso para chamar a API do Microsoft Graph.

No final deste guia, seu aplicativo chama uma API protegida usando contas pessoais. Os exemplos são outlook.com, live.com e outros. Seu aplicativo também chama contas de trabalho e escolares de qualquer empresa ou organização que tenha o Microsoft Entra ID.

Neste tutorial:

  • Criar um projeto UWP (Plataforma Universal do Windows) no Visual Studio
  • Registrar o aplicativo no portal do Azure
  • Adicionar código para entrada e saída do usuário
  • Adicionar código para chamar a API do Microsoft Graph
  • Testar o aplicativo

Pré-requisitos

Como funciona este guia

Shows how the sample app generated by this tutorial works

Este guia cria um aplicativo da UWP de exemplo que consulta a API do Microsoft Graph. Para esse cenário, um token é adicionado às solicitações HTTP usando o cabeçalho de Autorização. A Biblioteca de Autenticação da Microsoft lida com as aquisições e a renovações de tokens.

Pacotes NuGet

Este guia usa o seguinte pacote NuGet:

Biblioteca Descrição
Microsoft.Identity.Client Biblioteca de Autenticação da Microsoft
Microsoft.Graph Biblioteca de Clientes do Microsoft Graph

Configurar o seu projeto

Esta seção fornece instruções passo a passo para integrar um aplicativo .NET da área de trabalho do Windows (XAML) ao Entrar com a Microsoft. Em seguida, o aplicativo pode consultar APIs Web que exigem um token, como a API do Microsoft Graph.

Este guia cria um aplicativo que exibe um botão que consulta a API do Microsoft Graph e um botão para sair. Ele também exibe caixas de texto que contêm os resultados das chamadas.

Dica

Para ver uma versão completa do projeto que você criará neste tutorial, baixe-o do GitHub.

Criar o aplicativo

  1. Abra o Visual Studio e selecione Criar um projeto.

  2. Em Criar um novo projeto, escolha Aplicativo em Branco (Universal do Windows) para C# e selecione Avançar.

  3. Em Configurar seu novo projeto, nomeie o aplicativo e selecione Criar.

  4. Se solicitado, em Novo Projeto da Plataforma Universal do Windows, selecione qualquer versão para Destino e Mínima e selecione OK.

    Minimum and Target versions

Adicionar a Biblioteca de Autenticação da Microsoft ao projeto

  1. No Visual Studio, selecione Ferramentas>Gerenciador de Pacotes do NuGet>Console do Gerenciador de Pacotes.

  2. Copie e cole os seguintes comandos na janela Console do Gerenciador de Pacotes:

    Install-Package Microsoft.Identity.Client
    Install-Package Microsoft.Graph
    

    Observação

    O primeiro comando instala a MSAL.NET (Biblioteca de Autenticação da Microsoft). A MSAL.NET adquire, armazena em cache e atualiza os tokens de usuário que acessam APIs protegidas pela plataforma de identidade da Microsoft. O segundo comando instala a Biblioteca de Clientes .NET do Microsoft Graph para autenticar solicitações para o Microsoft Graph e fazer chamadas para o serviço.

Criar a interface do usuário do aplicativo

O Visual Studio cria MainPage.xaml como parte de seu modelo de projeto. Abra esse arquivo e substitua o nó Grade do aplicativo pelo seguinte código:

<Grid>
    <StackPanel Background="Azure">
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
            <Button x:Name="CallGraphButton" Content="Call Microsoft Graph API" HorizontalAlignment="Right" Padding="5" Click="CallGraphButton_Click" Margin="5" FontFamily="Segoe Ui"/>
            <Button x:Name="SignOutButton" Content="Sign-Out" HorizontalAlignment="Right" Padding="5" Click="SignOutButton_Click" Margin="5" Visibility="Collapsed" FontFamily="Segoe Ui"/>
        </StackPanel>
        <TextBlock Text="API Call Results" Margin="2,0,0,-5" FontFamily="Segoe Ui" />
        <TextBox x:Name="ResultText" TextWrapping="Wrap" MinHeight="120" Margin="5" FontFamily="Segoe Ui"/>
        <TextBlock Text="Token Info" Margin="2,0,0,-5" FontFamily="Segoe Ui" />
        <TextBox x:Name="TokenInfoText" TextWrapping="Wrap" MinHeight="70" Margin="5" FontFamily="Segoe Ui"/>
    </StackPanel>
</Grid>

Usar a Biblioteca de Autenticação da Microsoft para obter um token para a API do Microsoft Graph

Esta seção mostra como usar a Biblioteca de Autenticação da Microsoft para obter um token para a API do Microsoft Graph. Faça alterações no arquivo MainPage.xaml.cs.

  1. Em MainPage.xaml.cs, adicione as seguintes referências:

    using Microsoft.Identity.Client;
    using Microsoft.Graph;
    using Microsoft.Graph.Models;
    using System.Diagnostics;
    using System.Threading.Tasks;
    using System.Net.Http.Headers;
    
  2. Substitua a classe MainPage pelo seguinte código:

    public sealed partial class MainPage : Page
    {
    
        //Set the scope for API call to user.read
        private string[] scopes = new string[] { "user.read" };
    
        // Below are the clientId (Application Id) of your app registration and the tenant information.
        // You have to replace:
        // - the content of ClientID with the Application Id for your app registration
        private const string ClientId = "[Application Id pasted from the application registration portal]";
    
        private const string Tenant = "common"; // Alternatively "[Enter your tenant, as obtained from the Azure portal, e.g. kko365.onmicrosoft.com]"
        private const string Authority = "https://login.microsoftonline.com/" + Tenant;
    
        // The MSAL Public client app
        private static IPublicClientApplication PublicClientApp;
    
        private static string MSGraphURL = "https://graph.microsoft.com/v1.0/";
        private static AuthenticationResult authResult;
    
        public MainPage()
        {
            this.InitializeComponent();
        }
    
        /// <summary>
        /// Call AcquireTokenAsync - to acquire a token requiring user to sign in
        /// </summary>
        private async void CallGraphButton_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // Sign in user using MSAL and obtain an access token for Microsoft Graph
                GraphServiceClient graphClient = await SignInAndInitializeGraphServiceClient(scopes);
    
                // Call the /me endpoint of Graph
                User graphUser = await graphClient.Me.GetAsync();
    
                // Go back to the UI thread to make changes to the UI
                await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                {
                    ResultText.Text = "Display Name: " + graphUser.DisplayName + "\nBusiness Phone: " + graphUser.BusinessPhones.FirstOrDefault()
                                      + "\nGiven Name: " + graphUser.GivenName + "\nid: " + graphUser.Id
                                      + "\nUser Principal Name: " + graphUser.UserPrincipalName;
                    DisplayBasicTokenInfo(authResult);
                    this.SignOutButton.Visibility = Visibility.Visible;
                });
            }
            catch (MsalException msalEx)
            {
                await DisplayMessageAsync($"Error Acquiring Token:{System.Environment.NewLine}{msalEx}");
            }
            catch (Exception ex)
            {
                await DisplayMessageAsync($"Error Acquiring Token Silently:{System.Environment.NewLine}{ex}");
                return;
            }
        }
                /// <summary>
        /// Signs in the user and obtains an access token for Microsoft Graph
        /// </summary>
        /// <param name="scopes"></param>
        /// <returns> Access Token</returns>
        private static async Task<string> SignInUserAndGetTokenUsingMSAL(string[] scopes)
        {
            // Initialize the MSAL library by building a public client application
            PublicClientApp = PublicClientApplicationBuilder.Create(ClientId)
                .WithAuthority(Authority)
                .WithUseCorporateNetwork(false)
                .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
                 .WithLogging((level, message, containsPii) =>
                 {
                     Debug.WriteLine($"MSAL: {level} {message} ");
                 }, LogLevel.Warning, enablePiiLogging: false, enableDefaultPlatformLogging: true)
                .Build();
    
            // It's good practice to not do work on the UI thread, so use ConfigureAwait(false) whenever possible.
            IEnumerable<IAccount> accounts = await PublicClientApp.GetAccountsAsync().ConfigureAwait(false);
            IAccount firstAccount = accounts.FirstOrDefault();
    
            try
            {
                authResult = await PublicClientApp.AcquireTokenSilent(scopes, firstAccount)
                                                  .ExecuteAsync();
            }
            catch (MsalUiRequiredException ex)
            {
                // A MsalUiRequiredException happened on AcquireTokenSilentAsync. This indicates you need to call AcquireTokenAsync to acquire a token
                Debug.WriteLine($"MsalUiRequiredException: {ex.Message}");
    
                authResult = await PublicClientApp.AcquireTokenInteractive(scopes)
                                                  .ExecuteAsync()
                                                  .ConfigureAwait(false);
    
            }
            return authResult.AccessToken;
        }
    }
    

Obter um token de usuário interativamente

O método AcquireTokenInteractive resulta em uma janela que solicita a conexão do usuário. Os aplicativos geralmente exigem que os usuários entrem interativamente na primeira vez para acessar um recurso protegido. Eles também podem precisar entrar quando uma operação silenciosa para adquirir um token falhar. Por exemplo, quando a senha do usuário expirou.

Obter um token de usuário no modo silencioso

O método AcquireTokenSilent manipula as aquisições e renovações de tokens sem nenhuma interação do usuário. Após AcquireTokenInteractive ser executado pela primeira vez e solicitar credenciais ao usuário, use o método AcquireTokenSilent para solicitar tokens para chamadas posteriores. Esse método adquire os tokens silenciosamente. A Biblioteca de Autenticação da Microsoft lida com armazenamento em cache e renovação de tokens.

Por fim, o método AcquireTokenSilent falhará. A falha pode ser decorrente de os usuários terem se desconectado ou alterado a senha em outro dispositivo. Quando a Biblioteca de Autenticação da Microsoft detecta que o problema requer uma ação interativa, ela dispara uma exceção MsalUiRequiredException. O aplicativo pode tratar essa exceção de duas maneiras:

  • Seu aplicativo chama AcquireTokenInteractive imediatamente. Essa chamada resulta na solicitação de entrada do usuário. Normalmente, use essa abordagem para aplicativos online em que não há nenhum conteúdo offline disponível para o usuário. O exemplo gerado por essa instalação orientada segue esse padrão. Você pode vê-lo em ação na primeira vez que executar o exemplo.

    Como nenhum usuário usou o aplicativo, accounts.FirstOrDefault() conterá um valor nulo e lançará uma exceção MsalUiRequiredException.

    Em seguida, o código no exemplo manipula a exceção chamando AcquireTokenInteractive. Essa chamada resulta na solicitação de entrada do usuário.

  • Seu aplicativo apresenta uma indicação visual para os usuários de eles precisam se conectar. Em seguida, eles podem selecionar o momento certo para entrar. O aplicativo pode tentar AcquireTokenSilent novamente mais tarde. Use essa abordagem quando os usuários puderem usar outras funcionalidades do aplicativo sem interrupções. Um exemplo é quando o conteúdo offline está disponível no aplicativo. Nesse caso, os usuários podem decidir quando desejam se conectar. O aplicativo pode tentar AcquireTokenSilent novamente após a rede ter ficado não disponível temporariamente.

Instanciar o cliente do serviço Microsoft Graph obtendo o token do método SignInUserAndGetTokenUsingMSAL

No projeto, crie um novo arquivo chamado TokenProvider.cs: clique com o botão direito do mouse no projeto e selecione Adicionar>Novo Item>Página em Branco.

Adicione o código a seguir ao arquivo recém-criado:

using Microsoft.Kiota.Abstractions.Authentication;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace UWP_app_MSGraph {
    public class TokenProvider : IAccessTokenProvider {
        private Func<string[], Task<string>> getTokenDelegate;
        private string[] scopes;

        public TokenProvider(Func<string[], Task<string>> getTokenDelegate, string[] scopes) {
            this.getTokenDelegate = getTokenDelegate;
            this.scopes = scopes;
        }

        public Task<string> GetAuthorizationTokenAsync(Uri uri, Dictionary<string, object> additionalAuthenticationContext = default,
            CancellationToken cancellationToken = default) {
            return getTokenDelegate(scopes);
        }

        public AllowedHostsValidator AllowedHostsValidator { get; }
    }
}

Dica

Depois de colar o código, verifique se o namespace no arquivo TokenProvider.cs corresponde ao namespace do projeto. Isso permitirá que você faça referência mais facilmente à classe TokenProvider em seu projeto.

A classe TokenProvider define um provedor de token de acesso personalizado que executa o método delegado especificado para obter e retornar um token de acesso.

Adicione o seguinte novo método a MainPage.xaml.cs:

      /// <summary>
     /// Sign in user using MSAL and obtain a token for Microsoft Graph
     /// </summary>
     /// <returns>GraphServiceClient</returns>
     private async static Task<GraphServiceClient> SignInAndInitializeGraphServiceClient(string[] scopes)
     {
         var tokenProvider = new TokenProvider(SignInUserAndGetTokenUsingMSAL, scopes);
         var authProvider = new BaseBearerTokenAuthenticationProvider(tokenProvider);
         var graphClient = new GraphServiceClient(authProvider, MSGraphURL);

         return await Task.FromResult(graphClient);
     }

Nesse método, você está usando o provedor de token de acesso personalizado TokenProvider para conectar o método SignInUserAndGetTokenUsingMSAL ao SDK do .NET do Microsoft Graph e criar um cliente autenticado.

Para usar o BaseBearerTokenAuthenticationProvider, no arquivo MainPage.xaml.cs, adicione a seguinte referência:

using Microsoft.Kiota.Abstractions.Authentication;

Mais informações sobre como fazer uma chamada REST em uma API protegida

Neste aplicativo de exemplo, o método GetGraphServiceClient instancia GraphServiceClient usando um token de acesso. Em seguida, GraphServiceClient é usado para obter as informações de perfil do usuário do ponto de extremidade me.

Adicionar um método para desconectar o usuário

Para desconectar o usuário, adicione o seguinte método a MainPage.xaml.cs:

/// <summary>
/// Sign out the current user
/// </summary>
private async void SignOutButton_Click(object sender, RoutedEventArgs e)
{
    IEnumerable<IAccount> accounts = await PublicClientApp.GetAccountsAsync().ConfigureAwait(false);
    IAccount firstAccount = accounts.FirstOrDefault();

    try
    {
        await PublicClientApp.RemoveAsync(firstAccount).ConfigureAwait(false);
        await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
        {
            ResultText.Text = "User has signed out";
            this.CallGraphButton.Visibility = Visibility.Visible;
                this.SignOutButton.Visibility = Visibility.Collapsed;
            });
        }
        catch (MsalException ex)
        {
            ResultText.Text = $"Error signing out user: {ex.Message}";
        }
    }

MSAL.NET usa métodos assíncronos para adquirir tokens ou manipular contas. Como tal, dê suporte a ações da interface do usuário no thread da IU. Esse é o motivo para a chamada Dispatcher.RunAsync e as precauções para chamar ConfigureAwait(false).

Mais informações sobre sair

O método SignOutButton_Click remove o usuário do cache de usuários da Biblioteca de Autenticação da Microsoft. Esse método instrui efetivamente a Biblioteca de Autenticação da Microsoft a esquecer o usuário atual. Uma solicitação futura para adquirir um token só terá êxito se for interativa.

O aplicativo neste exemplo oferece suporte a um único usuário. A Biblioteca de Autenticação da Microsoft dá suporte a cenários em que o usuário pode entrar por mais de uma conta. Um exemplo é um aplicativo de email em que um usuário tem diversas contas.

Exibir informações básicas de token

Adicione o seguinte método a MainPage.xaml.cs para exibir informações básicas sobre o token:

/// <summary>
/// Display basic information contained in the token. Needs to be called from the UI thread.
/// </summary>
private void DisplayBasicTokenInfo(AuthenticationResult authResult)
{
    TokenInfoText.Text = "";
    if (authResult != null)
    {
        TokenInfoText.Text += $"User Name: {authResult.Account.Username}" + Environment.NewLine;
        TokenInfoText.Text += $"Token Expires: {authResult.ExpiresOn.ToLocalTime()}" + Environment.NewLine;
    }
}

Mais informações

Os tokens de ID adquiridos usando OpenID Connect também contêm um pequeno subconjunto de informações pertinentes ao usuário. DisplayBasicTokenInfo exibe informações básicas contidas no token. Essas informações incluem o nome de exibição e a ID do usuário. Elas também incluem a data de validade do token e a cadeia de caracteres que representa o token de acesso em si. Caso selecione o botão Chamar API do Microsoft Graph diversas vezes, você verá que o mesmo token foi reutilizado em solicitações posteriores. Veja também que a data de validade é estendida quando a Biblioteca de Autenticação da Microsoft decide que é a hora de renovar o token.

Exibir mensagem

Adicione o seguinte novo método a MainPage.xaml.cs:

/// <summary>
/// Displays a message in the ResultText. Can be called from any thread.
/// </summary>
private async Task DisplayMessageAsync(string message)
{
     await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
         () =>
         {
             ResultText.Text = message;
         });
     }

Registre seu aplicativo

Dica

As etapas neste artigo podem variar ligeiramente com base no portal do qual você começa.

Agora, registre o seu aplicativo:

  1. Faça login no Centro de administração do Microsoft Entra como pelo menos um Desenvolvedor de aplicativos.
  2. Se você tiver acesso a vários locatários, use o ícone de Configurações no menu superior para alternar para o locatário no qual deseja registrar o aplicativo no menu Diretórios + assinaturas.
  3. Navegue até Identidade>Aplicativos>Registros do aplicativo.
  4. Selecione Novo registro.
  5. Insira um Nome para seu aplicativo, por exemplo, UWP-App-calling-MSGraph. Os usuários do seu aplicativo podem ver esse nome e você pode alterá-lo mais tarde.
  6. Em Tipos de conta com suporte, selecione Contas em qualquer diretório organizacional (Qualquer diretório Microsoft Entra - Multitenant) e contas pessoais da Microsoft (por exemplo, Skype, Xbox).
  7. Selecione Registrar.
  8. Na página de visão geral, localize o valor da ID do Aplicativo (cliente) e copie-o. Volte para o Visual Studio, abra MainPage.xaml.cs e substitua o valor de ClientId por esse valor.

Configurar a autenticação para o aplicativo:

  1. No centro de administração do Microsoft Entra, selecione Autenticação>Adicionar uma plataforma e, em seguida, selecione Aplicativos móveis e da área de trabalho.
  2. Na seção URIs de Redirecionamento, insira https://login.microsoftonline.com/common/oauth2/nativeclient.
  3. Selecione Configurar.

Configurar permissões da API para seu aplicativo:

  1. Selecione a opção Permissões de API>Adicionar uma permissão.
  2. Selecione Microsoft Graph.
  3. Selecione Permissões delegadas, pesquise por User.Read e verifique se User.Read está selecionado.
  4. Se tiver feito alterações, selecione Adicionar permissões para salvá-las.

Habilitar a autenticação integrada em domínios federados (opcional)

Para habilitar a autenticação integrada do Windows quando ela for usada com um domínio federado Microsoft Entra, o manifesto do aplicativo deve habilitar recursos adicionais. Volte para seu aplicativo no Visual Studio.

  1. Abra Package.appxmanifest.

  2. Selecione Funcionalidades e habilite as seguintes configurações:

    • Autenticação de Empresa
    • Redes Privadas (Cliente e Servidor)
    • Certificados Compartilhados de Usuário

Importante

A Autenticação Integrada do Windows não está configurada por padrão nesse exemplo. Os aplicativos que solicitam funcionalidades de Enterprise Authentication ou Shared User Certificates exigem um nível mais alto de verificação pela Microsoft Store. Além disso, nem todos os desenvolvedores desejam executar o nível mais alto de verificação. Ative essa configuração somente se você precisar de autenticação integrada do Windows com um domínio federado Microsoft Entra.

Abordagem alternativa para usar WithDefaultRedirectURI()

No exemplo atual, o método WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient") é usado. Para usar WithDefaultRedirectURI(), conclua estas etapas:

  1. Em MainPage.XAML.cs, substitua WithRedirectUri por WithDefaultRedirectUri:

    Código atual

    
    PublicClientApp = PublicClientApplicationBuilder.Create(ClientId)
        .WithAuthority(Authority)
        .WithUseCorporateNetwork(false)
        .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
        .WithLogging((level, message, containsPii) =>
         {
             Debug.WriteLine($"MSAL: {level} {message} ");
         }, LogLevel.Warning, enablePiiLogging: false, enableDefaultPlatformLogging: true)
        .Build();
    
    

    Código atualizado

    
    PublicClientApp = PublicClientApplicationBuilder.Create(ClientId)
        .WithAuthority("https://login.microsoftonline.com/common")
        .WithUseCorporateNetwork(false)
        .WithDefaultRedirectUri()
        .WithLogging((level, message, containsPii) =>
         {
             Debug.WriteLine($"MSAL: {level} {message} ");
         }, LogLevel.Warning, enablePiiLogging: false, enableDefaultPlatformLogging: true)
        .Build();
    
  2. Localize o URI de retorno de chamada para seu aplicativo adicionando o campo redirectURI em MainPage.xaml.cs e configurando um ponto de interrupção nele:

    
    public sealed partial class MainPage : Page
    {
            ...
    
            string redirectURI = Windows.Security.Authentication.Web.WebAuthenticationBroker
                                .GetCurrentApplicationCallbackUri().ToString();
            public MainPage()
            {
                ...
            }
           ...
    }
    
    

    Execute o aplicativo e copie separadamente o valor de redirectUri quando o ponto de interrupção for atingido. O valor deve ter uma aparência semelhante à do seguinte valor: ms-app://s-1-15-2-1352796503-54529114-405753024-3540103335-3203256200-511895534-1429095407/

    É possível remover a linha de código posteriormente, porque ela é necessária apenas uma vez, para buscar o valor.

  3. No centro de administração do Microsoft Entra, adicione o valor retornado em RedirectUri no painel Autenticação.

Testar seu código

Para testar o aplicativo, selecione a tecla F5 para executar o projeto no Visual Studio. A janela principal será exibida:

Application's user interface

Quando estiver pronto para testar, selecione Chamar a API do Microsoft Graph. Em seguida, use uma conta organizacional do Microsoft Entra ou uma conta da Microsoft, como live.com ou outlook.com, para fazer login. Na primeira vez que o usuário executa esse teste, o aplicativo exibe uma janela solicitando que ele entre.

Na primeira vez que você entrar no aplicativo, será apresentada uma tela de consentimento semelhante à da imagem a seguir. Selecione Sim para consentir explicitamente com o acesso:

Access consent screen

Resultados esperados

São exibidas as informações de perfil do usuário retornadas pela chamada à API do Microsoft Graph na tela Resultados da Chamada à API:

API Call Results screen

Também serão exibidas informações básicas sobre o token adquirido por meio de AcquireTokenInteractive ou AcquireTokenSilent na caixa Informações de Token:

Propriedade Formatar Descrição
Username user@domain.com É o nome de usuário que identifica o usuário.
Token Expires DateTime A hora em que o token expira. A Biblioteca de Autenticação da Microsoft estende a data de validade renovando o token conforme necessário.

Mais informações sobre escopos e permissões delegadas

A API do Microsoft Graph requer o escopo user.read para ler um perfil do usuário. Esse escopo é adicionado, por padrão, a cada aplicativo que é registrado no Portal de Registro de Aplicativo. Outras APIs do Microsoft Graph e APIs personalizadas do servidor de back-end podem exigir escopos adicionais. Por exemplo, a API do Microsoft Graph requer o escopo Calendars.Read para listar os calendários do usuário.

Para acessar os calendários do usuário no contexto de um aplicativo, adicione a permissão delegada Calendars.Read às informações de registro de aplicativo. Em seguida, adicione o escopo Calendars.Read à chamada acquireTokenSilent.

Talvez os usuários precisem fornecer autorizações adicionais à medida que o número de escopos aumenta.

Problemas conhecidos

Problema 1

Você recebe uma das seguintes mensagens de erro ao fazer login no seu aplicativo em um domínio federado do Microsoft Entra:

  • "Nenhum certificado do cliente válido encontrado na solicitação."
  • "Nenhum certificado válido encontrado no repositório de certificados do usuário."
  • "Tente novamente escolhendo um método de autenticação diferente."

Causa: Os recursos corporativos e de certificado não estão habilitados.

Solução: Siga as etapas em Habilitar autenticação integrada em domínios federados (opcional).

Problema 2

Você habilitar a autenticação integrada em domínios federados e tentar usar o Windows Hello em um computador com Windows 10 para entrar em um ambiente com a autenticação multifator configurada. A lista de certificados é exibida. Se você escolher usar seu PIN, a janela PIN nunca será exibida.

Causa: Esse problema é uma limitação conhecida do agente de autenticação da Web em aplicativos UWP executando em desktops com Windows 10. Ele funciona corretamente no Windows 10 Mobile.

Solução alternativa: Selecione Entrar com outras opções. Depois selecione Entrar com nome de usuário e senha. Selecione Forneça sua senha. Depois passe pelo processo de autenticação de telefone.

Ajuda e suporte

Se precisar de ajuda, quiser relatar um problema ou desejar saber mais sobre as opções de suporte, confira Ajuda e suporte para desenvolvedores.

Próximas etapas

Saiba mais sobre como usar a MSAL (Biblioteca de Autenticação da Microsoft) para autorização e autenticação em aplicativos .NET: