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

Neste tutorial, você cria um aplicativo nativo da Plataforma Universal do Windows (UWP) que entra nos 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. Exemplos são outlook.com, live.com e outros. Seu aplicativo também chama contas corporativas e de estudante de qualquer empresa ou organização que tenha o Microsoft Entra ID.

Neste tutorial:

  • Criar um projeto da Plataforma Universal do Windows (UWP) no Visual Studio
  • Registrar o aplicativo no portal do Azure
  • Adicionar código para dar suporte ao login e logout do usuário
  • Adicionar código para chamar a API do Microsoft Graph
  • Testar a aplicação

Pré-requisitos

Como funciona este guia

Shows how the sample app generated by this tutorial works

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

Pacotes NuGet

Este guia usa o seguinte pacote NuGet:

Biblioteca Description
Microsoft.Identity.Client Biblioteca de autenticação do Microsoft
Microsoft.Graph Biblioteca de cliente do Microsoft Graph

Configure o seu projeto

Esta seção fornece instruções passo a passo para integrar um aplicativo .NET da Área de Trabalho do Windows (XAML) com a entrada com a Microsoft. Em seguida, o aplicativo pode consultar APIs da 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.

Gorjeta

Para ver uma versão completa do projeto que você cria neste tutorial, você pode baixá-lo do GitHub.

Criar a sua aplicação

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

  2. Em Criar um novo projeto, escolha Aplicativo em Branco (Universal 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 as versões Destino e Mínima e selecione OK.

    Minimum and Target versions

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

  1. No Visual Studio, selecione Ferramentas>Gestor de pacote NuGet>Consola do Gestor 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
    

    Nota

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

Crie a interface do usuário do seu aplicativo

O Visual Studio cria MainPage.xaml como parte do seu modelo de projeto. Abra este ficheiro e, em seguida, substitua o nó Grid da aplicação 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 arquivo.

  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 sua MainPage classe 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 AcquireTokenInteractive método resulta em uma janela que solicita que os usuários entrem. 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. Um exemplo é quando a senha de um usuário expirou.

Obter um token de utilizador automaticamente

O AcquireTokenSilent método lida com aquisições e renovações de token sem qualquer interação do usuário. Depois de AcquireTokenInteractive executar pela primeira vez e solicitar credenciais ao usuário, use o AcquireTokenSilent método para solicitar tokens para chamadas posteriores. Esse método adquire tokens silenciosamente. A Biblioteca de Autenticação da Microsoft lida com o cache e a renovação de tokens.

Eventualmente, o AcquireTokenSilent método falha. Os motivos para a falha incluem um usuário que saiu ou alterou sua senha em outro dispositivo. Quando a Biblioteca de Autenticação da Microsoft deteta que o problema requer uma ação interativa, ela lança uma MsalUiRequiredException exceção. Seu aplicativo pode lidar com essa exceção de duas maneiras:

  • Seu aplicativo liga AcquireTokenInteractive imediatamente. Essa chamada resulta em solicitar que o usuário entre. Normalmente, use essa abordagem para aplicativos on-line onde não há conteúdo offline disponível para o usuário. O exemplo gerado por essa configuração guiada segue o padrão. Você o vê em ação na primeira vez que executa o exemplo.

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

    Em seguida, o código no exemplo manipula a exceção chamando AcquireTokenInteractive. Essa chamada resulta em solicitar que o usuário entre.

  • Seu aplicativo apresenta uma indicação visual aos usuários de que eles precisam entrar. 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ção. Um exemplo é quando o conteúdo offline está disponível no aplicativo. Nesse caso, os usuários podem decidir quando querem entrar. O aplicativo pode tentar AcquireTokenSilent novamente depois que a rede ficou temporariamente indisponível.

Instancie o cliente de serviço do 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, selecione Adicionar>Nova Página em Branco de Item>.

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

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; }
    }
}

Gorjeta

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

A TokenProvider classe define um provedor de token de acesso personalizado que executa o método de 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 TokenProvider token de acesso personalizado para conectar o SignInUserAndGetTokenUsingMSAL método ao SDK do Microsoft Graph .NET e criar um cliente autenticado.

Para usar o BaseBearerTokenAuthenticationProviderarquivo , 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 relação a uma API protegida

Neste aplicativo de exemplo, o GetGraphServiceClient método 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 sair do usuário

Para sair do 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, ofereça suporte a ações da interface do usuário no thread da interface do usuário. Esta é a razão para a Dispatcher.RunAsync chamada e as precauções para chamar ConfigureAwait(false).

Mais informações sobre como sair

O SignOutButton_Click método remove o usuário do cache de usuário da Biblioteca de Autenticação da Microsoft. Esse método efetivamente diz à Biblioteca de Autenticação da Microsoft para esquecer o usuário atual. Uma solicitação futura para adquirir um token só será bem-sucedida se for interativa.

O aplicativo neste exemplo oferece suporte a um único usuário. A Biblioteca de Autenticação da Microsoft suporta cenários em que o utilizador pode iniciar sessão em mais do que uma conta. Um exemplo é um aplicativo de e-mail onde um usuário tem várias contas.

Exibir informações básicas do 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 o 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 o ID do usuário. Ele também inclui a data de expiração do token e a cadeia de caracteres que representa o próprio token de acesso. Se você selecionar o botão Chamar a API do Microsoft Graph várias vezes, verá que o mesmo token foi reutilizado para solicitações posteriores. Você também pode ver a data de expiração estendida quando a Biblioteca de Autenticação da Microsoft decidir que é hora de renovar o token.

Apresentar 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;
         });
     }

Registar a aplicação

Gorjeta

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

Agora, registe a sua candidatura:

  1. Entre 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 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é Registros do aplicativo Identity>Applications>.
  4. Selecione Novo registo.
  5. Introduza um Nome para a sua aplicação, 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 suportados, selecione Contas em qualquer diretório organizacional (Qualquer diretório Microsoft Entra - Multilocatário) e contas pessoais da Microsoft (por exemplo, Skype, Xbox).
  7. Selecione Registar.
  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.

Configure a autenticação para seu aplicativo:

  1. No centro de administração do Microsoft Entra, selecione Autenticação>Adicionar uma plataforma e, em seguida, selecione Aplicações móveis e de ambiente de trabalho.
  2. Na seção Redirecionar URIs, digite https://login.microsoftonline.com/common/oauth2/nativeclient.
  3. Selecione Configurar.

Configure permissões de API para seu aplicativo:

  1. Selecione Permissões de API>Adicionar uma permissão.
  2. Selecione Microsoft Graph.
  3. Selecione Permissões delegadas, procure User.Read e verifique se User.Read está selecionado.
  4. Se você fez alterações, selecione Adicionar permissões para salvá-las.

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

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

  1. Abra Package.appxmanifest.

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

    • Autenticação Empresarial
    • Redes Privadas (Cliente & Servidor)
    • Certificados de usuário compartilhados

Importante

A autenticação integrada do Windows não está configurada por padrão para este exemplo. Aplicativos que solicitam Enterprise Authentication ou Shared User Certificates recursos exigem um nível mais alto de verificação pela Windows Store. Além disso, nem todos os desenvolvedores querem executar o nível mais alto de verificação. Habilite essa configuração somente se precisar de autenticação integrada do Windows com um domínio federado do Microsoft Entra.

Abordagem alternativa para usar WithDefaultRedirectURI()

Na amostra atual, o WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient") método é usado. Para usar WithDefaultRedirectURI()o , 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. Encontre o URI de retorno de chamada do seu aplicativo adicionando o redirectURI campo em MainPage.xaml.cs e definindo 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 o valor de quando o ponto de redirectUri interrupção for atingido. O valor deve ser semelhante ao seguinte valor: ms-app://s-1-15-2-1352796503-54529114-405753024-3540103335-3203256200-511895534-1429095407/

    Em seguida, você pode remover a linha de código 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 .

Teste o seu código

Para testar seu aplicativo, selecione a tecla F5 para executar seu projeto no Visual Studio. A janela principal aparece:

Application's user interface

Quando estiver pronto para testar, selecione Chamar 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 entrar. Na primeira vez que um usuário executa esse teste, o aplicativo exibe uma janela solicitando que o usuário entre.

Na primeira vez que iniciar sessão na sua aplicação, é apresentado um ecrã de consentimento semelhante à imagem seguinte. Selecione Sim para consentir explicitamente o acesso:

Access consent screen

Resultados esperados

Você vê as informações de perfil de usuário retornadas pela chamada da API do Microsoft Graph na tela Resultados da chamada de API:

API Call Results screen

Você também vê informações básicas sobre o token adquirido via AcquireTokenInteractive ou AcquireTokenSilent na caixa Informações do token :

Property Formato Description
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 expiração renovando o token conforme necessário.

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

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

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

Os usuários podem ser solicitados a fornecer consentimentos adicionais à medida que você aumenta o número de escopos.

Problemas conhecidos

Problema 1

Recebe uma das seguintes mensagens de erro quando inicia sessão na sua aplicação num domínio federado do Microsoft Entra:

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

Causa: os recursos empresariais 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ê habilita a autenticação integrada em domínios federados e tenta usar o Windows Hello em um computador com Windows 10 para entrar em um ambiente com autenticação multifator configurada. A lista de certificados é exibida. Se optar por utilizar o PIN, a janela PIN nunca é apresentada.

Causa: esse problema é uma limitação conhecida do agente de autenticação da Web em aplicativos UWP executados em desktops Windows 10. Ele funciona bem no Windows 10 Mobile.

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

Ajuda e suporte

Se precisar de ajuda, quiser comunicar um problema ou quiser saber mais sobre as suas opções de suporte, consulte Ajuda e suporte para programadores.

Próximos passos

Saiba mais sobre como usar a Microsoft Authentication Library (MSAL) para autorização e autenticação em aplicativos .NET: